feat(android): add attachment boxing FJ- scan and submit

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-08-12 15:02:00 +08:00
parent 6b05d6c0e3
commit 15c29bceb8
5 changed files with 351 additions and 0 deletions

View File

@@ -112,6 +112,85 @@ class BoxingApiActions {
);
}
Future<BoxingActionResult<AttachmentBoxResult>> saveAttachmentBox({
required String zongpaiNo,
required int categoryId,
required int boxNo,
required int quantity,
}) async {
final baseUrl = await _requireBaseUrl();
if (baseUrl == null) return _missingApiUrl();
final result = await _apiService.saveAttachmentBox(
baseUrl: baseUrl,
zongpaiNo: zongpaiNo,
categoryId: categoryId,
boxNo: boxNo,
quantity: quantity,
);
if (result.success) return BoxingActionResult.ok(result);
if (result.isDuplicate) {
return BoxingActionResult.error(
kind: BoxingActionErrorKind.duplicate,
message: result.errorMessage ?? '提交失败',
boxNo: result.boxNo,
);
}
return BoxingActionResult.error(
kind: _kindForMessage(result.errorMessage),
message: result.errorMessage ?? '提交失败',
);
}
Future<BoxingActionResult<AttachmentBoxResult>> updateAttachmentBox({
required int boxItemId,
required int boxNo,
required int quantity,
}) async {
final baseUrl = await _requireBaseUrl();
if (baseUrl == null) return _missingApiUrl();
final result = await _apiService.updateAttachmentBox(
baseUrl: baseUrl,
boxItemId: boxItemId,
boxNo: boxNo,
quantity: quantity,
);
if (result.success) return BoxingActionResult.ok(result);
return BoxingActionResult.error(
kind: _kindForMessage(result.errorMessage),
message: result.errorMessage ?? '修改失败',
);
}
Future<BoxingActionResult<AttachmentBoxDeleteResult>> deleteAttachmentBox({
required int boxItemId,
}) async {
final baseUrl = await _requireBaseUrl();
if (baseUrl == null) return _missingApiUrl();
final result = await _apiService.deleteAttachmentBox(
baseUrl: baseUrl,
boxItemId: boxItemId,
);
if (result.success) return BoxingActionResult.ok(result);
return BoxingActionResult.error(
kind: _kindForMessage(result.errorMessage),
message: result.errorMessage ?? '删除失败',
);
}
Future<BoxingActionResult<AttachmentCategoryResult>>
fetchAttachmentCategories() async {
final baseUrl = await _requireBaseUrl();
if (baseUrl == null) return _missingApiUrl();
final result = await _apiService.fetchAttachmentCategories(
baseUrl: baseUrl,
);
if (result.success) return BoxingActionResult.ok(result);
return BoxingActionResult.error(
kind: _kindForMessage(result.errorMessage),
message: result.errorMessage ?? '加载失败',
);
}
Future<String?> _requireBaseUrl() async {
final baseUrl = await _loadApiUrl() ?? '';
if (baseUrl.isEmpty) return null;