chore: release client-v1.0.75
Deploy Client / build-client-web (push) Successful in 41s
Deploy Client / build-macos (push) Successful in 5m37s
Deploy Client / build-android (push) Successful in 1m15s
Deploy Client / build-ios (push) Successful in 4m3s
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled

出库列表加商品编码精确搜索框 + 移除数据导入入口

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-22 22:25:22 +08:00
parent 6570dfc240
commit a20645671b
5 changed files with 48 additions and 711 deletions
@@ -42,6 +42,7 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
Set<String> _filterCustomer = {};
Set<String>? _hiddenCols; // null = 尚未载入本地存档(回退到 minWidth 首次默认)
final _searchCtrl = TextEditingController();
final _codeSearchCtrl = TextEditingController();
static const _screenId = 'stock_out_list';
@@ -77,6 +78,7 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
@override
void dispose() {
_searchCtrl.dispose();
_codeSearchCtrl.dispose();
super.dispose();
}
@@ -84,6 +86,10 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
.read(stockOutListProvider.notifier)
.setKeyword(_searchCtrl.text.trim());
void _triggerCodeSearch() => ref
.read(stockOutListProvider.notifier)
.setProductCode(_codeSearchCtrl.text.trim());
String? get _startDate => _dateRange != null
? '${_dateRange!.start.year}-${_dateRange!.start.month.toString().padLeft(2, '0')}-${_dateRange!.start.day.toString().padLeft(2, '0')}'
: null;
@@ -384,6 +390,22 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
onSubmitted: (_) => _triggerSearch(),
);
// 商品编码精确反查(独立搜索框)
final codeSearchField = TextField(
controller: _codeSearchCtrl,
decoration: InputDecoration(
hintText: '商品编码,回车精确查',
prefixIcon: const Icon(Icons.qr_code, size: 16),
hintStyle: const TextStyle(fontSize: 12),
suffixIcon: IconButton(
icon: const Icon(Icons.search, size: 16),
tooltip: '按商品编码查',
onPressed: _triggerCodeSearch,
),
),
onSubmitted: (_) => _triggerCodeSearch(),
);
final refreshBtn = IconButton(
tooltip: '刷新',
icon: const Icon(Icons.refresh, size: 20),
@@ -417,6 +439,8 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
children: [
searchField,
const SizedBox(height: 8),
codeSearchField,
const SizedBox(height: 8),
Wrap(
spacing: 8,
runSpacing: 4,
@@ -450,6 +474,8 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
return Row(
children: [
SizedBox(width: 220, child: searchField),
const SizedBox(width: 8),
SizedBox(width: 180, child: codeSearchField),
const SizedBox(width: 12),
if (newBtn != null) newBtn,
const Spacer(),