diff --git a/client/lib/models/stock_in.dart b/client/lib/models/stock_in.dart index f10c526..5ade070 100644 --- a/client/lib/models/stock_in.dart +++ b/client/lib/models/stock_in.dart @@ -34,7 +34,17 @@ class StockInItem { this.productStorage, }); - factory StockInItem.fromJson(Map json) => StockInItem( + factory StockInItem.fromJson(Map json) { + final product = json['product'] as Map?; + // 历史导入行 product_id=0、无 product 关联,商品信息存在明细行自身列上。 + // 优先取明细行快照列,回退到 product 关联(App 新建单据走 product)。 + String? lineOrProduct(String lineKey, String productKey) { + final line = json[lineKey] as String?; + if (line != null && line.isNotEmpty) return line; + return product?[productKey] as String?; + } + + return StockInItem( orderId: json['order_id'] != null ? (json['order_id'] as num).toInt() : null, @@ -44,10 +54,10 @@ class StockInItem { totalPrice: (json['total_price'] as num).toDouble(), batchNo: json['batch_no'] as String?, productionDate: json['production_date'] as String?, - productName: (json['product'] as Map?)?['name'] as String?, - productCode: (json['product'] as Map?)?['code'] as String?, - productSeries: (json['product'] as Map?)?['series'] as String?, - productSpec: (json['product'] as Map?)?['spec'] as String?, + productName: lineOrProduct('product_name', 'name'), + productCode: lineOrProduct('product_code', 'code'), + productSeries: lineOrProduct('series', 'series'), + productSpec: lineOrProduct('spec', 'spec'), productUnit: (json['product'] as Map?)?['unit'] as String?, productOrigin: ((json['product'] as Map?)?['origin'] as Map?)?['name'] as String?, @@ -56,6 +66,7 @@ class StockInItem { productStorage: ((json['product'] as Map?)?['storage'] as Map?)?['name'] as String?, ); + } Map toJson() => { 'product_id': productId, diff --git a/client/lib/models/stock_out.dart b/client/lib/models/stock_out.dart index 415a10a..b25fe4c 100644 --- a/client/lib/models/stock_out.dart +++ b/client/lib/models/stock_out.dart @@ -23,7 +23,17 @@ class StockOutItem { this.productUnit, }); - factory StockOutItem.fromJson(Map json) => StockOutItem( + factory StockOutItem.fromJson(Map json) { + final product = json['product'] as Map?; + // 历史导入行 product_id=0、无 product 关联,商品信息存在明细行自身列上。 + // 优先取明细行快照列,回退到 product 关联(App 新建单据走 product)。 + String? lineOrProduct(String lineKey, String productKey) { + final line = json[lineKey] as String?; + if (line != null && line.isNotEmpty) return line; + return product?[productKey] as String?; + } + + return StockOutItem( orderId: json['order_id'] != null ? (json['order_id'] as num).toInt() : null, @@ -31,12 +41,13 @@ class StockOutItem { quantity: (json['quantity'] as num).toDouble(), unitPrice: (json['unit_price'] as num).toDouble(), totalPrice: (json['total_price'] as num).toDouble(), - productName: (json['product'] as Map?)?['name'] as String?, - productCode: (json['product'] as Map?)?['code'] as String?, - productSeries: (json['product'] as Map?)?['series'] as String?, - productSpec: (json['product'] as Map?)?['spec'] as String?, + productName: lineOrProduct('product_name', 'name'), + productCode: lineOrProduct('product_code', 'code'), + productSeries: lineOrProduct('series', 'series'), + productSpec: lineOrProduct('spec', 'spec'), productUnit: (json['product'] as Map?)?['unit'] as String?, ); + } } class StockOutOrder {