979ca3c83b
- 出库详情抽屉(管理员):数量/成本价/售价/利润 + 合计金额/合计利润 双行; operator 见 售价/小计(服务端抹零+前端隐藏双保险);利润负数 danger - 出库建单:商品名称下带编码(字体同系列列);金额列→利润列(实时); 底栏合计利润(仅管理员);进价列仅管理员;提交发新 key(cost_price/sale_price) - 入库建单列头:进价(单瓶)/ 参考售价 / 总进价 - 退单弹窗金额改售价口径(与冲应收一致);打印保留待定价回退成本兼容 - models 字段随后端消歧改名;golden 重打;新增抽屉双形态 widget 测试 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
75 lines
2.4 KiB
Dart
75 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jiu_client/core/theme/themes.dart';
|
|
import 'package:jiu_client/widgets/order_detail_drawer.dart';
|
|
|
|
/// 2026-07 定价重设计:出库详情按角色两种形态——
|
|
/// 管理员(行带 cost/profit)= 成本价/售价/利润 三数值列 + 合计利润;
|
|
/// operator(不带)= 售价/小计两列,无成本无利润。
|
|
void main() {
|
|
Widget host(OrderDetailDrawer drawer) => MaterialApp(
|
|
theme: buildTheme('a'),
|
|
home: Scaffold(body: drawer),
|
|
);
|
|
|
|
const line6 = OrderLine(
|
|
name: '汾酒青花20年',
|
|
code: 'ZXZ027232',
|
|
series: '普通/53度',
|
|
spec: '500ml*6/件',
|
|
qty: '2',
|
|
price: '¥400.00',
|
|
cost: '¥355.00',
|
|
profit: '¥90.00',
|
|
);
|
|
|
|
const line4 = OrderLine(
|
|
name: '汾酒青花20年',
|
|
code: 'ZXZ027232',
|
|
series: '普通/53度',
|
|
spec: '500ml*6/件',
|
|
qty: '2',
|
|
price: '¥400.00',
|
|
amount: '¥800.00',
|
|
);
|
|
|
|
testWidgets('管理员形态:成本价/售价/利润列 + 合计利润', (tester) async {
|
|
await tester.pumpWidget(host(OrderDetailDrawer(
|
|
title: 'CK001',
|
|
infoRows: const [],
|
|
linesLabel: '出库明细',
|
|
lines: const [line6],
|
|
totalText: '¥800.00',
|
|
profitText: '¥90.00',
|
|
priceLabel: '售价',
|
|
amountLabel: '小计',
|
|
actionGroups: const [],
|
|
)));
|
|
expect(find.text('成本价'), findsOneWidget);
|
|
expect(find.text('售价'), findsOneWidget);
|
|
expect(find.text('利润'), findsOneWidget);
|
|
expect(find.text('¥355.00'), findsOneWidget);
|
|
expect(find.text('¥90.00'), findsNWidgets(2)); // 行利润 + 合计利润
|
|
expect(find.text('合计利润 '), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('operator 形态:售价/小计,无成本无利润', (tester) async {
|
|
await tester.pumpWidget(host(OrderDetailDrawer(
|
|
title: 'CK001',
|
|
infoRows: const [],
|
|
linesLabel: '出库明细',
|
|
lines: const [line4],
|
|
totalText: '¥800.00',
|
|
priceLabel: '售价',
|
|
amountLabel: '小计',
|
|
actionGroups: const [],
|
|
)));
|
|
expect(find.text('售价'), findsOneWidget);
|
|
expect(find.text('小计'), findsOneWidget);
|
|
expect(find.text('成本价'), findsNothing);
|
|
expect(find.text('利润'), findsNothing);
|
|
expect(find.text('合计利润 '), findsNothing);
|
|
expect(find.text('¥800.00'), findsNWidgets(2)); // 行小计 + 合计金额
|
|
});
|
|
}
|