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 cc3951f..2648b6c 100644 --- a/client/lib/screens/stock_out/stock_out_list_screen.dart +++ b/client/lib/screens/stock_out/stock_out_list_screen.dart @@ -6,6 +6,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../core/responsive/responsive.dart'; import '../../core/theme/context_tokens.dart'; +import '../../core/theme/app_dims.g.dart'; import '../../models/stock_out.dart'; import '../../providers/stock_out_provider.dart'; import '../../repositories/stock_out_repository.dart'; @@ -344,7 +345,20 @@ class _StockOutListScreenState extends ConsumerState { )) .toList(); - return DataTableCard( + return Column( + children: [ + // 副标(还原原型 .head .sub) + Container( + width: double.infinity, + color: context.tokens.bg, + padding: const EdgeInsets.fromLTRB( + AppDims.sp3, AppDims.sp3, AppDims.sp3, 0), + child: Text('共 $totalCount 笔出库单', + style: TextStyle( + fontSize: AppDims.fsSm, color: context.tokens.muted)), + ), + Expanded( + child: DataTableCard( totalCount: totalCount, page: page, pageSize: pageSize, @@ -543,6 +557,9 @@ class _StockOutListScreenState extends ConsumerState { columns: columns, rows: rows, mobileCards: orders.map((o) => _orderCard(context, o)).toList(), + ), + ), + ], ); } @@ -1090,7 +1107,9 @@ class _StockOutDetailDialogState extends ConsumerState<_StockOutDetailDialog> { final item = e.value; return TableRow( decoration: BoxDecoration( - color: i.isEven ? Colors.white : const Color(0xFFFAFAFA)), + color: i.isEven + ? context.tokens.surface + : context.tokens.bg), children: [ _TableCell('${i + 1}'), _TableCell(item.productCode ?? '-'), diff --git a/client/test/golden/goldens/stock_out_list_a.png b/client/test/golden/goldens/stock_out_list_a.png new file mode 100644 index 0000000..fd050a9 Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_a.png differ diff --git a/client/test/golden/goldens/stock_out_list_b.png b/client/test/golden/goldens/stock_out_list_b.png new file mode 100644 index 0000000..fe6d29b Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_b.png differ diff --git a/client/test/golden/goldens/stock_out_list_c.png b/client/test/golden/goldens/stock_out_list_c.png new file mode 100644 index 0000000..7bab2d8 Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_c.png differ diff --git a/client/test/golden/goldens/stock_out_list_mobile_a.png b/client/test/golden/goldens/stock_out_list_mobile_a.png new file mode 100644 index 0000000..b963489 Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_mobile_a.png differ diff --git a/client/test/golden/goldens/stock_out_list_mobile_b.png b/client/test/golden/goldens/stock_out_list_mobile_b.png new file mode 100644 index 0000000..25e288d Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_mobile_b.png differ diff --git a/client/test/golden/goldens/stock_out_list_mobile_c.png b/client/test/golden/goldens/stock_out_list_mobile_c.png new file mode 100644 index 0000000..bbc5feb Binary files /dev/null and b/client/test/golden/goldens/stock_out_list_mobile_c.png differ diff --git a/client/test/golden/stock_out_list_golden_test.dart b/client/test/golden/stock_out_list_golden_test.dart new file mode 100644 index 0000000..8536a59 --- /dev/null +++ b/client/test/golden/stock_out_list_golden_test.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:jiu_client/core/models/page_result.dart'; +import 'package:jiu_client/core/auth/auth_state.dart'; +import 'package:jiu_client/models/stock_out.dart'; +import 'package:jiu_client/providers/stock_out_provider.dart'; +import 'package:jiu_client/screens/stock_out/stock_out_list_screen.dart'; + +import '../support/golden_harness.dart'; + +/// design-distill 阶段4:出库列表整屏 golden × 三主题(桌面 + 移动)。 +/// 复用共享 StatusBadge → StatusPill(草稿/待审核/已审核/已拒绝)。 +/// 更新基准:flutter test --update-goldens test/golden/stock_out_list_golden_test.dart + +const _orders = [ + StockOutOrder( + id: 1, orderNo: 'CK-20260620-031', warehouseId: 1, warehouseName: '主仓', + partnerName: '鼎丰超市', operatorName: '李销售', reviewerName: '张管理', + status: 'approved', orderDate: '2026-06-20', totalAmount: 12800), + StockOutOrder( + id: 2, orderNo: 'CK-20260618-022', warehouseId: 1, warehouseName: '主仓', + partnerName: '金樽酒楼', operatorName: '张前台', + status: 'pending', orderDate: '2026-06-18', totalAmount: 5400), + StockOutOrder( + id: 3, orderNo: 'CK-20260615-017', warehouseId: 1, warehouseName: '二号仓', + partnerName: '恒昌名酒行', operatorName: '李销售', + status: 'draft', orderDate: '2026-06-15', totalAmount: 3200), + StockOutOrder( + id: 4, orderNo: 'CK-20260612-009', warehouseId: 1, warehouseName: '主仓', + partnerName: '喜宴婚庆服务', operatorName: '张前台', reviewerName: '张管理', + status: 'rejected', orderDate: '2026-06-12', totalAmount: 1960), +]; + +class _FakeStockOutNotifier extends StockOutListNotifier { + @override + Future> build() async => + const PageResult(data: _orders, total: 4, page: 1, pageSize: 20); + @override + void setPage(int page) {} + @override + void setPageSize(int pageSize) {} + @override + void setStatus(String status) {} + @override + void setDateRange(String? startDate, String? endDate) {} + @override + void setKeyword(String keyword) {} + @override + void setProductCode(String code) {} + @override + void reload() {} +} + +List _overrides() => [ + stockOutListProvider.overrideWith(() => _FakeStockOutNotifier()), + isReadonlyProvider.overrideWithValue(false), + ]; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + + goldenAcrossThemes( + 'stock-out list 整屏(桌面)', + goldenPrefix: 'stock_out_list', + child: () => const Scaffold(body: StockOutListScreen()), + overrides: _overrides, + logical: const Size(1280, 900), + ); + + goldenAcrossThemes( + 'stock-out list 整屏(移动)', + goldenPrefix: 'stock_out_list_mobile', + child: () => const Scaffold(body: StockOutListScreen()), + overrides: _overrides, + logical: const Size(390, 1300), + ); +}