chore: release client-v1.0.70
Deploy Client / build-client-web (push) Successful in 38s
Deploy Client / build-macos (push) Successful in 2m10s
Deploy Client / build-android (push) Successful in 56s
Deploy Client / build-ios (push) Successful in 2m35s
Deploy Client / build-windows (push) Successful in 1m49s
Deploy Client / release-deploy-client (push) Successful in 1m23s

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-21 19:46:49 +08:00
parent 13a6777a85
commit 9d5bc18de1
8 changed files with 56 additions and 14 deletions
@@ -300,6 +300,14 @@ class _StockInFormScreenState extends ConsumerState<StockInFormScreen> {
);
return;
}
if (item.batchNoCtrl.text.trim().isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('${i + 1} 行请填写批次号'),
backgroundColor: AppTheme.danger),
);
return;
}
}
}
@@ -872,11 +880,13 @@ class _StockInFormScreenState extends ConsumerState<StockInFormScreen> {
return TextFormField(
controller: item.batchNoCtrl,
decoration: const InputDecoration(
hintText: '',
hintText: '',
isDense: true,
),
style: const TextStyle(fontSize: 13),
onChanged: (_) => setState(() {}),
validator: (v) =>
(v == null || v.trim().isEmpty) ? '不能为空' : null,
);
}
@@ -992,7 +1002,7 @@ class _StockInFormScreenState extends ConsumerState<StockInFormScreen> {
Expanded(flex: 18, child: th('名称')),
Expanded(flex: 12, child: th('系列')),
Expanded(flex: 12, child: th('规格')),
Expanded(flex: 14, child: th('生产日期')),
Expanded(flex: 20, child: th('生产日期')),
Expanded(flex: 12, child: th('批次号')),
Expanded(flex: 10, child: th('数量')),
Expanded(flex: 10, child: th('单价')),
@@ -1049,7 +1059,7 @@ class _StockInFormScreenState extends ConsumerState<StockInFormScreen> {
padding: const EdgeInsets.all(4),
child: _specField(item))),
Expanded(
flex: 14,
flex: 20,
child: Padding(
padding: const EdgeInsets.all(4),
child: _dateField(item))),
@@ -25,7 +25,8 @@ import '../../providers/finance_provider.dart' show financeRepositoryProvider;
import '../../providers/shop_provider.dart' show shopInfoProvider;
import '../../widgets/write_guard.dart';
import '../../widgets/order_row_actions.dart';
import '../../core/auth/auth_state.dart' show isAdminProvider;
import '../../core/auth/auth_state.dart'
show isAdminProvider, currentUserIdProvider;
class StockInListScreen extends ConsumerStatefulWidget {
const StockInListScreen({super.key});
@@ -479,7 +480,9 @@ class _StockInListScreenState extends ConsumerState<StockInListScreen> {
List<Widget> _orderActions(BuildContext context, StockInOrder o) {
return buildOrderRowActions(
readonly: WriteGuard.isReadonly(ref),
isAdmin: ref.watch(isAdminProvider),
canWithdraw: ref.watch(isAdminProvider) ||
(o.operatorId != null &&
o.operatorId == ref.watch(currentUserIdProvider)),
status: o.status,
orderId: o.id,
onDetail: () => _showDetail(context, o.id),
@@ -23,7 +23,8 @@ import '../../providers/product_provider.dart';
import '../../providers/finance_provider.dart' show financeRepositoryProvider;
import '../../widgets/write_guard.dart';
import '../../widgets/order_row_actions.dart';
import '../../core/auth/auth_state.dart' show isAdminProvider;
import '../../core/auth/auth_state.dart'
show isAdminProvider, currentUserIdProvider;
class StockOutListScreen extends ConsumerStatefulWidget {
const StockOutListScreen({super.key});
@@ -485,7 +486,9 @@ class _StockOutListScreenState extends ConsumerState<StockOutListScreen> {
List<Widget> _orderActions(BuildContext context, StockOutOrder o) {
return buildOrderRowActions(
readonly: WriteGuard.isReadonly(ref),
isAdmin: ref.watch(isAdminProvider),
canWithdraw: ref.watch(isAdminProvider) ||
(o.operatorId != null &&
o.operatorId == ref.watch(currentUserIdProvider)),
status: o.status,
orderId: o.id,
onDetail: () => _showDetail(context, o.id),