Merge remote-tracking branch 'origin/feat/camcard' into feat/camcard
# Conflicts: # components-diy/diy-card-mini.vue # components-diy/diy-card-show.vue # tests/diy-card-ab-visual.test.js # tests/diy-card-qr-style.test.js
This commit is contained in:
@@ -52,6 +52,23 @@ test('common: rowIconFor 字段→图标映射(无字形字段退化为空)', as
|
||||
assert.equal(m.rowIconFor('custom'), '');
|
||||
assert.equal(m.rowIconFor(''), '');
|
||||
assert.equal(m.rowIconFor(undefined), '');
|
||||
// 2.17.1: rowCssIconFor —— 邮箱/网站走 CSS 描边图标(信封/线框地球), 口径互补
|
||||
assert.equal(m.rowCssIconFor('email'), 'mail');
|
||||
assert.equal(m.rowCssIconFor('website'), 'web');
|
||||
assert.equal(m.rowCssIconFor('mobile'), '', '有 iconfont 字形的字段不走 CSS 档');
|
||||
assert.equal(m.rowCssIconFor(''), '');
|
||||
assert.equal(m.rowCssIconFor(undefined), '');
|
||||
// 2.18.1: 宫格图标 = WAP_LINE_ICONS(与 wap detail 快捷操作同源 SVG 线稿), wx/save 固定色
|
||||
assert.equal(m.WAP_LINE_ICONS.tel.mode, 'stroke');
|
||||
assert.equal(m.WAP_LINE_ICONS.wx.mode, 'fill');
|
||||
assert.equal(m.WAP_LINE_ICONS.wx.color, '#07C160', 'wx 微信绿固定色');
|
||||
assert.equal(m.WAP_LINE_ICONS.save.color, '#FF9500', 'save 通讯录橙固定色');
|
||||
assert.equal(m.WAP_LINE_ICONS.mail.mode, 'stroke');
|
||||
assert.equal(m.WAP_LINE_ICONS.web.mode, 'stroke');
|
||||
assert.ok(m.svgLineIconBg('unknown', '#000') === '', '未知类型空串');
|
||||
assert.ok(m.svgLineIconBg('tel', '#0F6E56').indexOf('base64,') > 0, 'data URI base64 形态');
|
||||
// 宫格 preset 补 save 紫色档
|
||||
assert.deepEqual(m.ACT_GRID_PRESETS.save, { bg: '#F0E9FB', fg: '#5B3DA8' });
|
||||
});
|
||||
|
||||
test('common: rowActOf 由 href 派生点击动作', async () => {
|
||||
@@ -83,10 +100,13 @@ test('common: 二维码四档归一化 + 尺寸表', async () => {
|
||||
// =============================================================
|
||||
|
||||
test('mini: 资料行图标列 + 文字标签退化', () => {
|
||||
assert.match(miniSrc, /<text v-if="rowIcon\(row\)" class="row-icon iconfont" :class="rowIcon\(row\)"/);
|
||||
// 2.17.1: 行首新增 CSS 描边图标档(邮箱/网站), iconfont 档退为 v-else-if
|
||||
assert.match(miniSrc, /<view v-if="rowCssIcon\(row\)" class="row-css-wrap">/);
|
||||
assert.match(miniSrc, /<text v-else-if="rowIcon\(row\)" class="row-icon iconfont" :class="rowIcon\(row\)"/);
|
||||
assert.match(miniSrc, /<text v-else class="row-label"/);
|
||||
// rowIcon 受 showRowIcons 开关控制(默认开)
|
||||
// rowIcon 受 showRowIcons 开关控制(默认开); CSS 档同受此开关
|
||||
assert.match(miniSrc, /rowIcon\(row\)\s*\{\s*return flagOn\(this\.c\.showRowIcons,\s*true\)/);
|
||||
assert.match(miniSrc, /rowCssIcon\(row\)\s*\{\s*return flagOn\(this\.c\.showRowIcons,\s*true\)/);
|
||||
});
|
||||
|
||||
test('mini: 资料行可点(开关 + href 派生 + emit row-act)', () => {
|
||||
@@ -109,8 +129,10 @@ test('mini: 二维码四档渲染分支齐全', () => {
|
||||
assert.match(miniSrc, /v-if="showQrBottom" class="mini-qr mini-qr-center"/);
|
||||
// 居中只加左右 auto 边距, 不碰 corner/head 档定位
|
||||
assert.match(miniSrc, /&\.mini-qr-center \{\s*margin-left: auto;\s*margin-right: auto;\s*\}/);
|
||||
// 总条件仍要求名片有 qr_url
|
||||
assert.match(miniSrc, /showQrBase\(\)\s*\{\s*return flagOn\(this\.c\.showQr,\s*false\) && !!\(this\.card && this\.card\.qr_url\)/);
|
||||
// 总条件: 开关 + 有码源(qrSrc: 自定义图优先, 回落名片码)
|
||||
assert.match(miniSrc, /showQrBase\(\)\s*\{\s*return flagOn\(this\.c\.showQr,\s*false\) && !!this\.qrSrc/);
|
||||
// 统一码源 qrSrc: 自定义图优先, 回落名片码(2.18)
|
||||
assert.match(miniSrc, /qrSrc\(\)\s*\{[\s\S]*?String\(this\.c\.qrImage \|\| ''\)\.trim\(\)[\s\S]*?card && this\.card\.qr_url/);
|
||||
});
|
||||
|
||||
test('mini: corner 档 Logo 避让 + 资料行/操作区动态让位', () => {
|
||||
@@ -119,7 +141,9 @@ test('mini: corner 档 Logo 避让 + 资料行/操作区动态让位', () => {
|
||||
// 头部水平让位 = cornerHeadStyle 动态反算(审计修复: 静态 180rpx 在自定义大尺寸下不足)
|
||||
assert.match(miniSrc, /<view class="mini-head" :style="cornerHeadStyle">/);
|
||||
// 资料行/操作区让位 = cornerClearStyle 动态反算(自定义大尺寸/关 tip 自动跟随, 不用 calc)
|
||||
assert.match(miniSrc, /:style="cornerClearStyle"/);
|
||||
// 2.18: 让位经 rowsClearStyle 分流(操作区在上方时资料行不重复位移); 操作区为 独立块样式+让位 合并绑定
|
||||
assert.match(miniSrc, /rowsClearStyle\(\)\s*\{[\s\S]*?this\.actsAbove \? \{\} : this\.cornerClearStyle/);
|
||||
assert.match(miniSrc, /:style="\[actsBlockStyle, cornerClearStyle\]"/);
|
||||
// 静态 CSS 让位必须已移除(动态值才是单一事实来源)
|
||||
assert.ok(!/padding-right: 180rpx;/.test(miniSrc), '静态 180rpx 让位应废弃, 改由 cornerHeadStyle 动态给出');
|
||||
// 浮层 CSS 只定位于层次; 视觉衬底(白卡等)由 qrBlockStyle 内联决定
|
||||
|
||||
Reference in New Issue
Block a user