Files
jiu/client/test/golden/finance_mobile_golden_test.dart
T
wangjia dde87a32b6 feat(client): 库存/盘点/财务窄屏对齐移动原型(KPI 网格/卡片流/图标徽章/sheet)
- 库存列表:窄屏隐藏页内大标题头;KPI 2×2 MKpiGrid(缺货卡 warn+点击筛选);
  MSearchRow(详搜钮开筛选 sheet:状态/规格/系列);卡片徽章换图标变体
- 库存盘点:窄屏卡片流(单号/范围·项数/进行中徽章带图标/差异/日期)+
  详情 sheet(drow 键值行)+ 底部操作条;DateTime.now→appNow 可注入时钟
- 财务:窄屏隐藏大标题头;KPI 2×2(收入 up 绿/支出 down 红/应收 warn);
  DsSeg 应收/应付/流水三分段 + 卡片流(类型徽章带图标、金额正负色)
- golden:新增 m_inventory / m_inventory_check / m_finance 三屏×三主题
  (390×844@2x);重生成既有 inventory_list_mobile / finance_mobile 基准
  (桌面 golden 零改动)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:18:17 +08:00

127 lines
4.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:jiu_client/core/auth/auth_state.dart';
import 'package:jiu_client/core/models/page_result.dart';
import 'package:jiu_client/core/utils/clock.dart';
import 'package:jiu_client/models/finance.dart';
import 'package:jiu_client/models/stock_summary.dart';
import 'package:jiu_client/providers/finance_provider.dart';
import 'package:jiu_client/providers/stock_in_provider.dart';
import 'package:jiu_client/providers/stock_out_provider.dart';
import 'package:jiu_client/screens/finance/finance_screen.dart';
import '../support/golden_harness.dart';
/// 财务管理 窄屏形态 golden × 三主题(390×844 @2x)——对齐原型 m-finance.html
/// 隐藏页内大标题头 + KPI 2×2(收入 up 绿 / 支出 down 红)+ DsSeg 三分段
/// + 应收卡片流(往来单位 + 金额 + 未结清徽章带图标)。fixtures 与桌面 golden 同套。
/// 更新基准:flutter test --update-goldens test/golden/finance_mobile_golden_test.dart
// 原型 SUMMARY 8 行
const _rows = [
PartnerFinanceRow(partnerId: 1, name: '华东酒类批发', recv: 128400, openCount: 2),
PartnerFinanceRow(partnerId: 2, name: '金樽商贸', recv: 86200, openCount: 1),
PartnerFinanceRow(partnerId: 3, name: '茅台华南经销', pay: 142800, openCount: 1),
PartnerFinanceRow(partnerId: 4, name: '鸿运餐饮连锁', recv: 74600, openCount: 1),
PartnerFinanceRow(partnerId: 5, name: '五粮液省级代理', pay: 96400, openCount: 1),
PartnerFinanceRow(
partnerId: 6, name: '盛世名酒城', recv: 52300, pay: 18600, openCount: 2),
PartnerFinanceRow(partnerId: 7, name: '御品烟酒行', recv: 31800, openCount: 1),
PartnerFinanceRow(partnerId: 8, name: '川渝糖酒集团', pay: 60400, openCount: 1),
];
// 原型 FLOWS 前 5 条(流水分段用;390×844 首屏展示应收卡片流)
const _flows = [
FinanceRecord(
id: 1,
type: 'receipt',
amount: 68000,
balance: 0,
status: 'closed',
partnerName: '华东酒类批发',
recordDate: '2026-06-20',
remark: '飞天茅台货款'),
FinanceRecord(
id: 2,
type: 'payment',
amount: 142800,
balance: 0,
status: 'closed',
partnerName: '茅台华南经销',
recordDate: '2026-06-19',
remark: '6月采购结算'),
FinanceRecord(
id: 3,
type: 'receipt',
amount: 42600,
balance: 0,
status: 'closed',
partnerName: '金樽商贸',
recordDate: '2026-06-18',
remark: '五粮液尾款'),
FinanceRecord(
id: 4,
type: 'receipt',
amount: 31500,
balance: 0,
status: 'closed',
partnerName: '鸿运餐饮连锁',
recordDate: '2026-06-17',
remark: '宴会用酒'),
FinanceRecord(
id: 5,
type: 'payment',
amount: 96400,
balance: 0,
status: 'closed',
partnerName: '五粮液省级代理',
recordDate: '2026-06-16',
remark: '普五补货'),
];
class _FakeFinanceList extends FinanceListNotifier {
@override
Future<PageResult<FinanceRecord>> build() async =>
const PageResult(data: _flows, total: 5, page: 1, pageSize: 50);
@override
void setType(String type) {}
@override
void setMonth(String month) {}
@override
void setRange(String startDate, String endDate) {}
@override
void setPage(int page) {}
@override
void setPageSize(int pageSize) {}
@override
void reload() {}
}
List<Override> _overrides() => [
financeListProvider.overrideWith(() => _FakeFinanceList()),
financePartnerRowsProvider.overrideWith((ref) async => _rows),
// 环比凑成原型 ▲8.4% / ▼3.1%
stockOutSummaryProvider.overrideWith((ref) async =>
const StockSummary(monthAmount: 1860000, lastMonthAmount: 1715867)),
stockInSummaryProvider.overrideWith((ref) async =>
const StockSummary(monthAmount: 1320000, lastMonthAmount: 1362229)),
isReadonlyProvider.overrideWithValue(false),
];
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
SharedPreferences.setMockInitialValues({});
appClock = () => DateTime(2026, 7, 13, 9, 30, 15);
goldenAcrossThemes(
'finance 窄屏(m-finance',
goldenPrefix: 'm_finance',
child: () => const Scaffold(body: FinanceScreen()),
overrides: _overrides,
logical: const Size(390, 844),
dpr: 2,
);
}