fix(diy-card): 审计修复——corner 档头部水平让位动态化 + self 首载骨架屏

- 修复 P1: corner 档自定义 qrSize>120 时静态 padding-right:180rpx
  让位不足, 浮层压住头部姓名区 → 新增 cornerHeadStyle 按浮层实际
  宽度(尺寸+衬底+右偏移20+呼吸20)动态反算, 与 cornerClearStyle
  垂直让位同口径; 废弃静态 CSS 值(负断言锁定)
- 修复: self.vue 已登录首次加载三分支都不渲染(loading 且无 card)
  → 白屏闪烁; 改 v-else-if="loading || card" 挂上 mini 骨架屏
- 契约测试: 新增 cornerHeadStyle 断言 + resolveQrSize 三处口径 +
  静态让位废弃负断言; 3 项变异验证全抓住; 四文件 67 项全绿
This commit is contained in:
2026-10-21 14:09:56 +08:00
parent 805bbb9598
commit f1bd606e0b
4 changed files with 34 additions and 11 deletions

View File

@@ -126,9 +126,10 @@ test('mini: qrBlockStyle 四档外观分支(多彩只装饰外围, 码黑白保
});
test('mini: 二维码尺寸取 resolveQrSize(自定义>0 优先, 否则档位自动)', () => {
// qrBlockStyle 与 cornerClearStyle 都按同一口径反算(自定义大尺寸时让位自动跟随)
// qrBlockStyle + cornerClearStyle(垂直让位) + cornerHeadStyle(水平让位) 三处同口径
// (自定义大尺寸时浮层占高与占宽都要动态跟随)
const hits = miniSrc.match(/resolveQrSize\(this\.qrPos, this\.c\.qrSize\)/g) || [];
assert.equal(hits.length, 2, 'qrBlockStyle + cornerClearStyle 两处, 实际 ' + hits.length);
assert.equal(hits.length, 3, 'qrBlockStyle + cornerClearStyle + cornerHeadStyle 三处, 实际 ' + hits.length);
});
test('mini: 微调位移 transform(不用 calc, WXSS 兼容)', () => {
@@ -152,6 +153,15 @@ test('mini: cornerClearStyle 按实际尺寸反算让位(防遮挡, 纯数值不
assert.match(miniSrc, /const tip = this\.showQrTip \? 42 : 0;/);
});
test('mini: cornerHeadStyle 头部水平让位按浮层实际宽度动态反算', () => {
// 审计修复: 静态 180rpx 在自定义 qrSize>120 时不足 → 头部让位动态化
assert.match(miniSrc, /cornerHeadStyle\(\)\s*\{[\s\S]*?if \(this\.qrPos !== 'corner' \|\| !this\.showQrBase\) return \{\};/);
// 浮层宽[尺寸+衬底] + 右偏移 20 + 呼吸 20
assert.match(miniSrc, /paddingRight: \(size \+ pad \+ 40\) \+ 'rpx'/);
// 模板头部绑定了动态让位(浮层不存在时输出空对象不占位)
assert.match(miniSrc, /<view class="mini-head" :style="cornerHeadStyle">/);
});
test('mini: 四个二维码块统一绑 qrBlockStyle(尺寸/位移/外观单一事实来源)', () => {
const binds = miniSrc.match(/:style="qrBlockStyle"/g) || [];
assert.equal(binds.length, 4, 'corner/head/rows/bottom 四块, 实际 ' + binds.length);