import 'package:dio/dio.dart'; import '../core/api/api_client.dart'; import '../core/exceptions.dart'; import '../core/models/page_result.dart'; import '../models/inventory.dart'; class InventoryRepository { final ApiClient _client; const InventoryRepository(this._client); Future> listInventory({ int? warehouseId, String? keyword, List? series, List? spec, int page = 1, int pageSize = 50, }) async { try { final params = { 'page': page, 'page_size': pageSize, if (warehouseId != null) 'warehouse_id': warehouseId, if (keyword != null && keyword.isNotEmpty) 'keyword': keyword, if (series != null && series.isNotEmpty) 'series': series.join(','), if (spec != null && spec.isNotEmpty) 'spec': spec.join(','), }; final resp = await _client.get('/inventory', params: params); return PageResult.fromJson( resp.data as Map, Inventory.fromJson, ); } on DioException catch (e) { throw AppException( e.response?.data?['error'] as String? ?? '获取库存失败', statusCode: e.response?.statusCode, ); } } Future> createCheck(Map data) async { try { final resp = await _client.post('/inventory/checks', data: data); return resp.data as Map; } on DioException catch (e) { throw AppException( e.response?.data?['error'] as String? ?? '提交盘点失败', statusCode: e.response?.statusCode, ); } } Future updateRemark(int id, String remark) async { try { await _client.put('/inventory/$id/remark', data: {'remark': remark}); } on DioException catch (e) { throw AppException( e.response?.data?['error'] as String? ?? '更新备注失败', statusCode: e.response?.statusCode, ); } } Future> listLogs({ int? warehouseId, int? productId, int page = 1, int pageSize = 50, }) async { try { final params = { 'page': page, 'page_size': pageSize, if (warehouseId != null) 'warehouse_id': warehouseId, if (productId != null) 'product_id': productId, }; final resp = await _client.get('/inventory/logs', params: params); return PageResult.fromJson( resp.data as Map, InventoryLog.fromJson, ); } on DioException catch (e) { throw AppException( e.response?.data?['error'] as String? ?? '获取流水失败', statusCode: e.response?.statusCode, ); } } }