feat(diy-card): 4.0 头像开关 + 二维码四档外观/自定义尺寸/微调位移/提示开关

- common.js: QR_STYLES 四档枚举 + normalizeQrStyle(未知回落 card) +
  resolveQrSize(自定义 px×2>档位自动 rpx) + qrTransform(位移经
  translate, WXSS 不支持 calc)
- mini.vue 基件: 头像可隐藏(默认显示, 兼容历史配置); qrBlockStyle
  统一四档外观(plain 原图/card 白卡/theme 主题色/gradient 渐变,
  多彩只装饰外围衬底, 码黑白保可扫); cornerClearStyle 按实际尺寸
  反算让位(自定义大尺寸/关 tip 自动跟随); 扫码提示可关
- show/self: 6 新字段透传; ab-visual 测试 corner 断言改锚动态让位
- 新增 qr-style 契约测试 20 项(纯函数真值 + 基件 + 透传 + 两个
  design.html 面板控件绑定与预览消费 + 反例), 9 项变异验证全抓住
- 前端四测试文件共 66 项全绿; E2E 143 项; 三回归 79/41/56 全绿
This commit is contained in:
2026-10-21 12:28:18 +08:00
parent 8bdd9f1291
commit 805bbb9598
6 changed files with 352 additions and 38 deletions

View File

@@ -107,12 +107,17 @@ test('mini: 二维码四档渲染分支齐全', () => {
assert.match(miniSrc, /showQrBase\(\)\s*\{\s*return flagOn\(this\.c\.showQr,\s*false\) && !!\(this\.card && this\.card\.qr_url\)/);
});
test('mini: corner 档 Logo 避让 + 资料行让位样式', () => {
test('mini: corner 档 Logo 避让 + 资料行/操作区动态让位', () => {
assert.match(miniSrc, /showLogo\(\)\s*\{[\s\S]*?this\.qrPos !== 'corner'/);
assert.match(miniSrc, /:class="\{ 'qr-at-corner': qrPos === 'corner' \}"/);
assert.match(miniSrc, /&\.qr-at-corner \{[\s\S]*?\.mini-rows,\s*\.mini-acts\s*\{\s*margin-top: 108rpx;/);
// 浮层衬底(封面/纯色上都可扫)
assert.match(miniSrc, /&\.mini-qr-corner \{[\s\S]*?background: #ffffff;/);
// 头部固定让位(头像|信息|二维码 三段 flex, 信息区不被右上浮层压)
assert.match(miniSrc, /&\.qr-at-corner \{[\s\S]*?\.mini-head\s*\{\s*padding-right: 180rpx;/);
// 资料行/操作区让位 = cornerClearStyle 动态反算(自定义大尺寸/关 tip 自动跟随, 不用 calc)
assert.match(miniSrc, /:style="cornerClearStyle"/);
// 浮层 CSS 只定位于层次; 视觉衬底(白卡等)由 qrBlockStyle 内联决定
assert.match(miniSrc, /&\.mini-qr-corner \{\s*position: absolute;\s*top: 20rpx;\s*right: 20rpx;\s*z-index: 3;\s*margin-top: 0;\s*box-shadow:/);
assert.ok(!/&\.mini-qr-corner \{[\s\S]*?background: #ffffff;/.test(miniSrc),
'白底衬底应移入 qrBlockStyle(多彩外观时不再是白底), CSS 不写死');
});
// =============================================================