outing_log_detail_page.dart 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import '../../core/theme/app_colors.dart';
  4. import '../../core/utils/date_utils.dart' as du;
  5. import '../../core/utils/responsive.dart';
  6. import '../../shared/widgets/form_section.dart';
  7. import '../../shared/widgets/form_field_row.dart';
  8. import 'outing_log_api.dart';
  9. import 'outing_log_model.dart';
  10. final outingLogDetailProvider = FutureProvider.autoDispose.family<OutingLogModel, String>((ref, id) async {
  11. return ref.read(outingLogApiProvider).fetchDetail(id);
  12. });
  13. class OutingLogDetailPage extends ConsumerWidget {
  14. final String id;
  15. const OutingLogDetailPage({super.key, required this.id});
  16. @override
  17. Widget build(BuildContext context, WidgetRef ref) {
  18. final detailAsync = ref.watch(outingLogDetailProvider(id));
  19. final r = ResponsiveHelper.of(context);
  20. return Scaffold(
  21. appBar: AppBar(title: const Text('日志详情')),
  22. body: detailAsync.when(
  23. loading: () => const Center(child: CircularProgressIndicator()),
  24. error: (_, __) => const Center(child: Text('加载失败')),
  25. data: (log) => Center(
  26. child: ConstrainedBox(
  27. constraints: BoxConstraints(maxWidth: r.detailTwoColumns ? 700 : double.infinity),
  28. child: SingleChildScrollView(
  29. padding: const EdgeInsets.symmetric(vertical: 8),
  30. child: FormSection(
  31. title: '外出日志',
  32. children: [
  33. FormFieldRow(label: '拜访单号', value: log.visitNo, showArrow: false),
  34. FormFieldRow(label: '日期', value: du.DateUtils.formatDate(log.visitDate), showArrow: false),
  35. FormFieldRow(label: '拜访客户', value: log.customerName.isEmpty ? '-' : log.customerName, showArrow: false),
  36. FormFieldRow(label: '联系人', value: log.contactName.isEmpty ? '-' : log.contactName, showArrow: false),
  37. FormFieldRow(label: '拜访方式', value: log.visitType, showArrow: false),
  38. FormFieldRow(label: '拜访地点', value: log.visitLocation.isEmpty ? '-' : log.visitLocation, showArrow: false),
  39. FormFieldRow(label: '拜访结果', value: log.visitResult.isEmpty ? '-' : log.visitResult, showArrow: false),
  40. FormFieldRow(label: '打卡校验', value: log.checkInStatus, showArrow: false),
  41. FormFieldRow(label: '创建人', value: log.salespersonName, showArrow: false),
  42. FormFieldRow(label: '创建时间', value: du.DateUtils.formatDateTime(log.createTime), showArrow: false),
  43. const SizedBox(height: 8),
  44. const Padding(
  45. padding: EdgeInsets.symmetric(horizontal: 14),
  46. child: Text('日志内容', style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: AppColors.textSecondary)),
  47. ),
  48. Padding(
  49. padding: const EdgeInsets.all(14),
  50. child: Text(log.visitSummary.isEmpty ? '-' : log.visitSummary, style: const TextStyle(color: AppColors.textPrimary, fontSize: 14, height: 1.6)),
  51. ),
  52. ],
  53. ),
  54. ),
  55. ),
  56. ),
  57. ),
  58. );
  59. }
  60. }