diff --git a/client/lib/screens/settings/settings_screen.dart b/client/lib/screens/settings/settings_screen.dart index 118adef..f4daee1 100644 --- a/client/lib/screens/settings/settings_screen.dart +++ b/client/lib/screens/settings/settings_screen.dart @@ -1271,6 +1271,10 @@ class _BatchImportWidgetState extends ConsumerState<_BatchImportWidget> { '格式:选项编号 | 选项名称 | 单品数量 | 备注'), _ImportSlot('库存', '/import/inventory', '格式:商品编号|商品名称|系列|规格|单位|库存数量|单价|金额|生产日期|批次|分类|所在仓库|入库日期|供应商|上次盘点|备注'), + _ImportSlot('入库单', '/import/stock-in', + '老系统入库单打印格式:每个文件一张单(含单据号/往来单位/日期/明细)'), + _ImportSlot('出库单', '/import/stock-out', + '老系统出库单打印格式:每个文件一张单(含单据号/往来单位/日期/明细)'), ]; final Set _selectedTables = {}; @@ -1418,10 +1422,20 @@ class _BatchImportWidgetState extends ConsumerState<_BatchImportWidget> { final data = (resp.data is Map) ? resp.data as Map : {}; if (mounted) setState(() { slot.success = true; - slot.imported = (data['imported'] ?? 0) as int; - slot.skipped = (data['skipped'] ?? 0) as int; - slot.updated = (data['updated'] ?? 0) as int; - slot.total = (data['total'] ?? slot.imported + slot.skipped + slot.updated) as int; + if (data.containsKey('order_no')) { + // 单据类导入(入库单/出库单):每个文件一张单, + // 已存在时后端返回 {skipped: true}(布尔),不能按 int 解析。 + final skippedOne = data['skipped'] == true; + slot.imported = skippedOne ? 0 : 1; + slot.skipped = skippedOne ? 1 : 0; + slot.updated = 0; + slot.total = 1; + } else { + slot.imported = (data['imported'] ?? 0) as int; + slot.skipped = (data['skipped'] ?? 0) as int; + slot.updated = (data['updated'] ?? 0) as int; + slot.total = (data['total'] ?? slot.imported + slot.skipped + slot.updated) as int; + } slot.isProcessing = false; }); } on DioException catch (e) {