From 078fab30f0207f6abe526cbd49b44ddd5c2da286 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 22 Jun 2026 20:16:19 +0800 Subject: [PATCH] chore: release client-v1.0.74 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 入库/出库详情页明细新增生产日期、批次号两列 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx --- CHANGELOG-client.md | 5 +++++ client/lib/models/stock_out.dart | 6 ++++++ .../stock_in/stock_in_list_screen.dart | 20 +++++++++++++------ .../stock_out/stock_out_list_screen.dart | 20 +++++++++++++------ 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/CHANGELOG-client.md b/CHANGELOG-client.md index 64e3f68..f64deb1 100644 --- a/CHANGELOG-client.md +++ b/CHANGELOG-client.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.74] - 2026-06-22 + +### 改进 +- 入库单 / 出库单详情页的商品明细表新增「生产日期」「批次号」两列,便于核对货品批次信息 + ## [1.0.73] - 2026-06-22 ### 改进 diff --git a/client/lib/models/stock_out.dart b/client/lib/models/stock_out.dart index 437bed7..4ea52b8 100644 --- a/client/lib/models/stock_out.dart +++ b/client/lib/models/stock_out.dart @@ -12,6 +12,8 @@ class StockOutItem { final String? productSeries; final String? productSpec; final String? productUnit; + final String? batchNo; + final String? productionDate; bool get isReturned => returnedQuantity >= quantity && quantity > 0; @@ -29,6 +31,8 @@ class StockOutItem { this.productSeries, this.productSpec, this.productUnit, + this.batchNo, + this.productionDate, }); factory StockOutItem.fromJson(Map json) { @@ -57,6 +61,8 @@ class StockOutItem { productSeries: lineOrProduct('series', 'series'), productSpec: lineOrProduct('spec', 'spec'), productUnit: (json['product'] as Map?)?['unit'] as String?, + batchNo: json['batch_no'] as String?, + productionDate: json['production_date'] as String?, ); } } diff --git a/client/lib/screens/stock_in/stock_in_list_screen.dart b/client/lib/screens/stock_in/stock_in_list_screen.dart index c665ba0..d16c59b 100644 --- a/client/lib/screens/stock_in/stock_in_list_screen.dart +++ b/client/lib/screens/stock_in/stock_in_list_screen.dart @@ -1064,16 +1064,18 @@ class _StockInDetailDialogState extends ConsumerState<_StockInDetailDialog> { 0: FixedColumnWidth(36), 1: FlexColumnWidth(1.2), 2: FlexColumnWidth(2.2), - 3: FlexColumnWidth(1.5), - 4: FlexColumnWidth(1.5), - 5: FlexColumnWidth(1.2), - 6: FlexColumnWidth(1.2), - 7: FlexColumnWidth(1.2), + 3: FlexColumnWidth(1.3), + 4: FlexColumnWidth(1.3), + 5: FlexColumnWidth(1.3), + 6: FlexColumnWidth(1.3), + 7: FlexColumnWidth(1.0), + 8: FlexColumnWidth(1.1), + 9: FlexColumnWidth(1.1), }, children: [ TableRow( decoration: const BoxDecoration(color: Color(0xFFF0F4FF)), - children: ['序号', '商品编码', '名称', '系列', '规格', '数量', '单价', '金额'] + children: ['序号', '商品编码', '名称', '系列', '规格', '生产日期', '批次号', '数量', '单价', '金额'] .map((h) => Padding( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 10), @@ -1122,6 +1124,12 @@ class _StockInDetailDialogState extends ConsumerState<_StockInDetailDialog> { ), _TableCell(item.productSeries ?? '-'), _TableCell(item.productSpec ?? '-'), + _TableCell((item.productionDate != null && + item.productionDate!.length >= 10) + ? item.productionDate!.substring(0, 10) + : (item.productionDate ?? '-')), + _TableCell( + (item.batchNo?.isNotEmpty ?? false) ? item.batchNo! : '-'), _TableCell(item.quantity.toStringAsFixed(3)), _TableCell('¥${item.unitPrice.toStringAsFixed(2)}'), _TableCell('¥${item.totalPrice.toStringAsFixed(2)}'), diff --git a/client/lib/screens/stock_out/stock_out_list_screen.dart b/client/lib/screens/stock_out/stock_out_list_screen.dart index eaa7de6..17a0e08 100644 --- a/client/lib/screens/stock_out/stock_out_list_screen.dart +++ b/client/lib/screens/stock_out/stock_out_list_screen.dart @@ -1003,16 +1003,18 @@ class _StockOutDetailDialogState extends ConsumerState<_StockOutDetailDialog> { 0: FixedColumnWidth(36), 1: FlexColumnWidth(1.2), 2: FlexColumnWidth(2.2), - 3: FlexColumnWidth(1.5), - 4: FlexColumnWidth(1.5), - 5: FlexColumnWidth(1.2), - 6: FlexColumnWidth(1.2), - 7: FlexColumnWidth(1.2), + 3: FlexColumnWidth(1.3), + 4: FlexColumnWidth(1.3), + 5: FlexColumnWidth(1.3), + 6: FlexColumnWidth(1.3), + 7: FlexColumnWidth(1.0), + 8: FlexColumnWidth(1.1), + 9: FlexColumnWidth(1.1), }, children: [ TableRow( decoration: const BoxDecoration(color: Color(0xFFF0F4FF)), - children: ['序号', '商品编码', '名称', '系列', '规格', '数量', '单价', '金额'] + children: ['序号', '商品编码', '名称', '系列', '规格', '生产日期', '批次号', '数量', '单价', '金额'] .map((h) => Padding( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 10), child: Text(h, @@ -1035,6 +1037,12 @@ class _StockOutDetailDialogState extends ConsumerState<_StockOutDetailDialog> { _TableCell(item.productName ?? '-'), _TableCell(item.productSeries ?? '-'), _TableCell(item.productSpec ?? '-'), + _TableCell((item.productionDate != null && + item.productionDate!.length >= 10) + ? item.productionDate!.substring(0, 10) + : (item.productionDate ?? '-')), + _TableCell( + (item.batchNo?.isNotEmpty ?? false) ? item.batchNo! : '-'), _TableCell(item.quantity.toStringAsFixed(3)), _TableCell('¥${item.unitPrice.toStringAsFixed(2)}'), _TableCell('¥${item.totalPrice.toStringAsFixed(2)}'),