import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import '../../core/theme/app_colors.dart'; import '../../core/utils/responsive.dart'; import '../../shared/widgets/form_section.dart'; import 'outing_log_api.dart'; import 'outing_log_model.dart'; class OutingLogCreatePage extends ConsumerStatefulWidget { const OutingLogCreatePage({super.key}); @override ConsumerState createState() => _OutingLogCreatePageState(); } class _OutingLogCreatePageState extends ConsumerState { final _contentCtrl = TextEditingController(); final _clientCtrl = TextEditingController(); final _addressCtrl = TextEditingController(); DateTime _date = DateTime.now(); bool _isSubmitting = false; @override void dispose() { _contentCtrl.dispose(); _clientCtrl.dispose(); _addressCtrl.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final r = ResponsiveHelper.of(context); return Scaffold( appBar: TDNavBar( title: '外出日志', titleColor: Colors.white, backgroundColor: const Color(0xFF00ABF3), centerTitle: false, ), body: Column( children: [ Expanded( child: Align(alignment: Alignment.topCenter, child: ConstrainedBox( constraints: BoxConstraints(maxWidth: r.formMaxWidth), child: SingleChildScrollView( padding: const EdgeInsets.symmetric(vertical: 8), child: FormSection( title: '日志信息', children: [ ListTile( title: const Text('日期', style: TextStyle(color: AppColors.textSecondary, fontSize: 13)), trailing: Text('${_date.year}-${_date.month.toString().padLeft(2, '0')}-${_date.day.toString().padLeft(2, '0')}', style: const TextStyle(color: AppColors.textPrimary, fontSize: 13)), onTap: () async { final picked = await showDatePicker(context: context, initialDate: _date, firstDate: DateTime(2020), lastDate: DateTime(2030)); if (picked != null) setState(() => _date = picked); }, ), _buildTextField('拜访客户', _clientCtrl), _buildTextField('拜访地点', _addressCtrl), _buildTextField('日志内容', _contentCtrl, maxLines: 5), ], ), ), ), ), ), Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration(color: Colors.white, boxShadow: [BoxShadow(color: Colors.black.withValues(alpha: 0.05), blurRadius: 4, offset: const Offset(0, -1))]), child: TDButton( text: _isSubmitting ? '提交中...' : '提交', type: TDButtonType.fill, theme: TDButtonTheme.primary, size: TDButtonSize.large, isBlock: true, disabled: _isSubmitting, onTap: _submit, ), ), ], ), ); } Widget _buildTextField(String label, TextEditingController ctrl, {int maxLines = 1}) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), child: TextField( controller: ctrl, maxLines: maxLines, decoration: InputDecoration(labelText: label, border: const OutlineInputBorder(), floatingLabelStyle: const TextStyle(color: AppColors.primary)), ), ); } Future _submit() async { setState(() => _isSubmitting = true); try { await ref.read(outingLogApiProvider).create(OutingLogModel( id: '', visitNo: '', salespersonId: '', salespersonName: '', deptId: '', deptName: '', customerName: _clientCtrl.text, visitDate: _date, visitStartTime: _date, visitEndTime: _date, visitType: '常规拜访', visitPurpose: '', visitLocation: _addressCtrl.text, visitSummary: _contentCtrl.text, nextVisitTime: _date, createTime: DateTime.now(), updateTime: DateTime.now(), )); if (context.mounted) context.pop(); } catch (_) {} finally { if (mounted) setState(() => _isSubmitting = false); } } }