fix(client): 数据导入页新增入库单/出库单导入槽

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx
This commit is contained in:
wangjia
2026-06-21 21:25:01 +08:00
parent 6faadf8670
commit e36de528b0
@@ -1271,6 +1271,10 @@ class _BatchImportWidgetState extends ConsumerState<_BatchImportWidget> {
'格式:选项编号 | 选项名称 | 单品数量 | 备注'),
_ImportSlot('库存', '/import/inventory',
'格式:商品编号|商品名称|系列|规格|单位|库存数量|单价|金额|生产日期|批次|分类|所在仓库|入库日期|供应商|上次盘点|备注'),
_ImportSlot('入库单', '/import/stock-in',
'老系统入库单打印格式:每个文件一张单(含单据号/往来单位/日期/明细)'),
_ImportSlot('出库单', '/import/stock-out',
'老系统出库单打印格式:每个文件一张单(含单据号/往来单位/日期/明细)'),
];
final Set<String> _selectedTables = {};
@@ -1418,10 +1422,20 @@ class _BatchImportWidgetState extends ConsumerState<_BatchImportWidget> {
final data = (resp.data is Map) ? resp.data as Map<String, dynamic> : <String, dynamic>{};
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) {