feat(client): 价签默认模板品名默认展示 + 二维码放大留小边框
- 默认模板改为代码只读基准:readLabelTemplates 加载时强制用 builtinDefault() 覆盖 builtin-default 项,忽略存储里的旧脏几何 (旧默认品名被关/旧 QR 坐标等一律自愈回代码基准) - 二维码放大 x198/y44/尺寸96 → x192/y32/尺寸120,四周留 ~1mm 小边框 - 原型 label-template-editor.html 高级 QR 输入同步;golden 重生 - 新增存储测试钉死「内置默认永远回代码基准」 原型与代码同提交(design-first 双边一致)
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
@@ -47,5 +47,69 @@ void main() {
|
||||
expect(list.map((t) => t.id), ['builtin-default', 'tpl-2']);
|
||||
expect(list[1].name, '双语抬头');
|
||||
});
|
||||
|
||||
test('老店铺旧默认 QR 加载时自动升级为居中坐标', () {
|
||||
final def = LabelTemplate.builtinDefault();
|
||||
// 构造两个历史默认签名的模板(贴头顶版 + 中间偏上版)
|
||||
final legacyA = def.copyWith(id: 'tpl-legacy-a', name: '旧模板A');
|
||||
legacyA.qr
|
||||
..x = 178
|
||||
..y = 25
|
||||
..size = 134;
|
||||
final legacyB = def.copyWith(id: 'tpl-legacy-b', name: '旧模板B');
|
||||
legacyB.qr
|
||||
..x = 190
|
||||
..y = 34
|
||||
..size = 116;
|
||||
final cf = <String, dynamic>{
|
||||
'label_templates': [legacyA.toJson(), legacyB.toJson()],
|
||||
};
|
||||
final list = readLabelTemplates(cf);
|
||||
for (final t in list) {
|
||||
expect(t.qr.x, def.qr.x, reason: '${t.name} QR.x 应升级到新默认');
|
||||
expect(t.qr.y, def.qr.y, reason: '${t.name} QR.y 应升级到新默认');
|
||||
expect(t.qr.size, def.qr.size, reason: '${t.name} QR.size 应升级到新默认');
|
||||
}
|
||||
});
|
||||
|
||||
test('内置默认模板永远回代码基准:存储里被改脏也覆盖回 builtinDefault', () {
|
||||
final def = LabelTemplate.builtinDefault();
|
||||
// 模拟老库存的 builtin-default:品名被关、QR 乱改、字号乱改
|
||||
final stale = def.copyWith();
|
||||
stale.textStack.name.show = false;
|
||||
stale.qr
|
||||
..x = 10
|
||||
..y = 10
|
||||
..size = 200;
|
||||
stale.textStack.subLines[0].fontSize = 99;
|
||||
final cf = <String, dynamic>{
|
||||
'label_templates': [stale.toJson()],
|
||||
};
|
||||
final t =
|
||||
readLabelTemplates(cf).firstWhere((x) => x.id == 'builtin-default');
|
||||
expect(t.textStack.name.show, isTrue, reason: '品名默认必须展示');
|
||||
expect(t.qr.x, def.qr.x);
|
||||
expect(t.qr.y, def.qr.y);
|
||||
expect(t.qr.size, def.qr.size);
|
||||
expect(t.textStack.subLines[0].fontSize, def.textStack.subLines[0].fontSize);
|
||||
});
|
||||
|
||||
test('用户自定义过的 QR 不匹配旧签名,加载时保持不动', () {
|
||||
final custom = LabelTemplate.builtinDefault().copyWith(
|
||||
id: 'tpl-custom',
|
||||
name: '自定义位置',
|
||||
);
|
||||
custom.qr
|
||||
..x = 210
|
||||
..y = 60
|
||||
..size = 80; // 与任一历史默认都不同
|
||||
final cf = <String, dynamic>{
|
||||
'label_templates': [custom.toJson()],
|
||||
};
|
||||
final t = readLabelTemplates(cf).first;
|
||||
expect(t.qr.x, 210);
|
||||
expect(t.qr.y, 60);
|
||||
expect(t.qr.size, 80);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user