From 9ef5ae70593d788de3a0e257dd1d454ef2fd03f6 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 25 Jun 2026 16:22:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(client):=20=E5=9F=BA=E7=A1=80=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8A=A0=E5=95=86=E5=93=81=E6=A1=A3=E6=A1=88=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E8=A1=A8=20+=20=E5=8E=9F=E5=9E=8B=205=20tab=20?= =?UTF-8?q?=E7=BD=AE=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 非破坏式向原型靠拢: - 新增「商品档案」tab(productListProvider 全量商品表:商品 name+code/系列/规格/ 分类/单位/默认成本价/查看,行点进详情),原型头牌功能(此前基础数据页只管字典) - tab 重排:原型 5 个(商品档案/商品介绍/系列/规格/香型)置前;描述文档→商品介绍 - 保留 商品名称/产地/保质期/储存/仓库 字典 tab 在后(不删管理入口、不孤立数据) 整屏 golden ×三主题入回归闸。 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX --- .../lib/screens/products/products_screen.dart | 150 +++++++++++++++++- .../golden/goldens/products_archive_a.png | Bin 0 -> 30255 bytes .../golden/goldens/products_archive_b.png | Bin 0 -> 30012 bytes .../golden/goldens/products_archive_c.png | Bin 0 -> 30276 bytes .../golden/products_archive_golden_test.dart | 59 +++++++ 5 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 client/test/golden/goldens/products_archive_a.png create mode 100644 client/test/golden/goldens/products_archive_b.png create mode 100644 client/test/golden/goldens/products_archive_c.png create mode 100644 client/test/golden/products_archive_golden_test.dart diff --git a/client/lib/screens/products/products_screen.dart b/client/lib/screens/products/products_screen.dart index f19280e..dc0bc0b 100644 --- a/client/lib/screens/products/products_screen.dart +++ b/client/lib/screens/products/products_screen.dart @@ -1,10 +1,14 @@ import '../../core/utils/dialog_util.dart'; import 'package:flutter/material.dart'; 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/warehouse.dart'; +import '../../models/product.dart'; import '../../providers/product_option_provider.dart'; +import '../../providers/product_provider.dart'; import '../../models/product_option.dart' show ProductCategoryOption; import '../../providers/warehouse_provider.dart'; import '../../providers/shop_provider.dart'; @@ -25,6 +29,7 @@ class _ProductsScreenState extends ConsumerState { // 「设为默认」的乐观覆盖:点一下立刻变色,不等后端回包(key→选项 id)。 final Map _optDefaults = {}; + final _archiveSearchCtrl = TextEditingController(); final _nameSearchCtrl = TextEditingController(); final _seriesSearchCtrl = TextEditingController(); final _specSearchCtrl = TextEditingController(); @@ -61,6 +66,7 @@ class _ProductsScreenState extends ConsumerState { _storageSearchCtrl.dispose(); _descDocSearchCtrl.dispose(); _categorySearchCtrl.dispose(); + _archiveSearchCtrl.dispose(); super.dispose(); } @@ -68,31 +74,167 @@ class _ProductsScreenState extends ConsumerState { Widget build(BuildContext context) { return PageScaffold( title: '基础数据', + // 原型 5 个 tab(商品档案/商品介绍/系列/规格/香型)置前; + // 其余字典(商品名称/产地/保质期/储存/仓库)保留在后,不删管理入口。 tabs: const [ - Tab(text: '商品名称'), + Tab(text: '商品档案'), + Tab(text: '商品介绍'), Tab(text: '系列'), Tab(text: '规格'), Tab(text: '香型'), + Tab(text: '商品名称'), Tab(text: '产地'), Tab(text: '保质期'), Tab(text: '储存方式'), - Tab(text: '描述文档'), Tab(text: '仓库'), ], tabViews: [ - _buildNameTab(), + _buildArchiveTab(), + _buildDescDocTab(), _buildSeriesTab(), _buildSpecTab(), _buildCategoryTab(), + _buildNameTab(), _buildOriginTab(), _buildShelfLifeTab(), _buildStorageTab(), - _buildDescDocTab(), _buildWarehousesTab(), ], ); } + // ── 商品档案 tab(全量商品表,还原原型头牌) ──────────────────── + Widget _buildArchiveTab() { + final async = ref.watch(productListProvider); + return async.when( + loading: () => const Center(child: CircularProgressIndicator()), + error: (e, _) => + _buildError(() => ref.read(productListProvider.notifier).reload()), + data: (result) { + final items = result.data; + final notifier = ref.read(productListProvider.notifier); + return DataTableCard( + totalCount: result.total, + page: result.page, + pageSize: result.pageSize, + onPageChanged: (p) => notifier.setPage(p), + onPageSizeChanged: (s) => notifier.setPageSize(s), + toolbar: Row( + children: [ + SizedBox( + width: 240, + child: TextField( + controller: _archiveSearchCtrl, + decoration: const InputDecoration( + hintText: '商品名 / 编码 / 拼音,回车搜索', + prefixIcon: Icon(Icons.search, size: 16), + hintStyle: TextStyle(fontSize: 13), + ), + onSubmitted: (v) => notifier.setKeyword(v.trim()), + ), + ), + const SizedBox(width: AppDims.sp2), + OutlinedButton.icon( + onPressed: () => exportExcel( + filename: '商品档案', + headers: ['商品编码', '商品名称', '系列', '规格', '分类', '单位', '默认成本价'], + rows: items + .map((p) => [ + p.code, + p.name, + p.series ?? '', + p.spec ?? '', + p.categoryName ?? '', + p.unit, + p.purchasePrice ?? '', + ]) + .toList(), + ), + icon: const Icon(Icons.download, size: 16), + label: const Text('导出'), + ), + const Spacer(), + ], + ), + mobileCards: items + .map((p) => MobileListCard( + onTap: () => context.push('/products/${p.id}'), + title: Text(p.name), + subtitle: p.code.isEmpty ? null : Text(p.code), + fields: [ + if ((p.series ?? '').isNotEmpty) + MobileCardField('系列', p.series), + if ((p.spec ?? '').isNotEmpty) + MobileCardField('规格', p.spec), + if ((p.categoryName ?? '').isNotEmpty) + MobileCardField('分类', p.categoryName), + MobileCardField('单位', p.unit.isEmpty ? '-' : p.unit), + ], + )) + .toList(), + columns: const [ + DataColumn(label: Text('商品')), + DataColumn(label: Text('系列')), + DataColumn(label: Text('规格')), + DataColumn(label: Text('分类')), + DataColumn(label: Text('单位')), + DataColumn(label: Text('默认成本价')), + DataColumn(label: Text('操作')), + ], + rows: items.isEmpty + ? [ + DataRow(cells: [ + DataCell(Text('暂无商品(入库录单后自动建档)', + style: TextStyle(color: context.tokens.muted))), + for (int i = 1; i < 7; i++) const DataCell(SizedBox()), + ]) + ] + : items + .map((p) => DataRow( + onSelectChanged: (_) => context.push('/products/${p.id}'), + cells: [ + DataCell(SizedBox( + width: 200, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(p.name, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontWeight: FontWeight.w600)), + if (p.code.isNotEmpty) + Text(p.code, + style: TextStyle( + fontFamily: 'monospace', + fontSize: AppDims.fsXs, + color: context.tokens.muted)), + ], + ), + )), + DataCell(Text((p.series ?? '').isEmpty ? '-' : p.series!)), + DataCell(Text((p.spec ?? '').isEmpty ? '-' : p.spec!)), + DataCell(Text((p.categoryName ?? '').isEmpty + ? '-' + : p.categoryName!)), + DataCell(Text(p.unit.isEmpty ? '-' : p.unit)), + DataCell(Text( + p.purchasePrice != null && p.purchasePrice! > 0 + ? '¥${p.purchasePrice!.toStringAsFixed(2)}' + : '-')), + DataCell(TextButton( + onPressed: () => context.push('/products/${p.id}'), + child: const Text('查看', + style: TextStyle(fontSize: 12)), + )), + ], + )) + .toList(), + ); + }, + ); + } + // ── 商品名称 tab ─────────────────────────────────────────── Widget _buildNameTab() { diff --git a/client/test/golden/goldens/products_archive_a.png b/client/test/golden/goldens/products_archive_a.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0027a9f2334402a546639c7b5c50f5c0a25247 GIT binary patch literal 30255 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 literal 0 HcmV?d00001 diff --git a/client/test/golden/goldens/products_archive_b.png b/client/test/golden/goldens/products_archive_b.png new file mode 100644 index 0000000000000000000000000000000000000000..95a935b46289b131b3cd8e2aef6bf53d8460ad5a GIT binary patch literal 30012 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%0DW(P3+9nv(M&zS@OKu=qtHy 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 W9K9!yR|ISAs@%;>DZkzS{r>> build() async => + const PageResult(data: _products, total: 3, page: 1, pageSize: 20); + @override + void setPage(int page) {} + @override + void setPageSize(int pageSize) {} + @override + void setKeyword(String keyword) {} + @override + void setCategoryId(int? categoryId) {} + @override + void reload() {} +} + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + + goldenAcrossThemes( + 'products 商品档案 tab', + goldenPrefix: 'products_archive', + child: () => const Scaffold(body: ProductsScreen()), + overrides: () => [ + productListProvider.overrideWith(() => _FakeProductList()), + isReadonlyProvider.overrideWithValue(false), + ], + logical: const Size(1280, 760), + ); +}