From 724e7ac1347f2a55cc3e484a3ea657b7a4d2e9f9 Mon Sep 17 00:00:00 2001 From: jing <1683105490@qq.com> Date: Wed, 21 Oct 2026 16:05:59 +0800 Subject: [PATCH] =?UTF-8?q?chore=EF=BC=9A=E7=B2=BE=E9=80=89=E5=90=8D?= =?UTF-8?q?=E7=89=87=E7=BB=84=E4=BB=B6=E5=8F=AF=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E5=BC=80=E5=90=AF=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components-diy/diy-card-show.vue | 48 ++++++++++++++++++++++++++++++-- tests/diy-card-qr-style.test.js | 7 +++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/components-diy/diy-card-show.vue b/components-diy/diy-card-show.vue index 6bc8406..363f37c 100644 --- a/components-diy/diy-card-show.vue +++ b/components-diy/diy-card-show.vue @@ -20,9 +20,13 @@ - + - + + + {{ initialOf(card.name) }} + + {{ card.name || '未命名名片' }} {{ jobLine }} @@ -62,7 +66,7 @@ // 自绘参考图版式 —— 主题色顶栏衬底 + 白卡压边 + 右上小二维码(预览名片) + // 图标资料行 + 卡外「发名片」胶囊。面板仅颜色/底色/圆角/阴影/行数继续生效。 import { - CardTokens, px2rpx, num, themeGradient, visibleRows, rowIconFor, rowActOf, + CardTokens, px2rpx, num, flagOn, initialOf, avatarBg, themeGradient, visibleRows, rowIconFor, rowActOf, } from './diy-card-common.js'; export default { @@ -94,6 +98,13 @@ export default { bandStyle() { return this.$util.objToStyle({ background: themeGradient(this.card) }); }, + /** 头像开关: 面板「显示头像」(历史配置无此字段默认显示; 关后头部只留姓名/职位) */ + showAvatarBlock() { + return flagOn(this.c.showAvatar, true); + }, + avatarStyle() { + return this.$util.objToStyle({ background: avatarBg(this.card) }); + }, /** 职位行: 职位优先, 缺失退公司/名片标题(参考图只显一行) */ jobLine() { const card = this.card || {}; @@ -158,6 +169,8 @@ export default { this.fetchData(); }, methods: { + // 模板无法访问模块导入, 需挂到实例(diy-card-mini 同款写法); 头像缺图时显示姓氏首字 + initialOf, fetchData() { const cardId = String((this.value || {}).cardId || '').trim(); if (cardId === '') { @@ -280,12 +293,41 @@ export default { align-items: flex-start; justify-content: space-between; + /* 头像(面板「显示头像」可关): 圆形, 底色主题色, 缺图显示姓名首字 */ + .card-avatar { + flex-shrink: 0; + width: 104rpx; + height: 104rpx; + border-radius: 50%; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + + .avatar-img { + width: 100%; + height: 100%; + display: block; + } + + .avatar-initial { + font-size: 42rpx; + font-weight: 700; + color: #ffffff; + } + } + .head-info { flex: 1; min-width: 0; display: flex; flex-direction: column; + /* 与头像的间距只在头像显示时存在(关闭后姓名列与资料行左缘对齐) */ + &.with-avatar { + margin-left: 24rpx; + } + .card-name { font-size: 38rpx; font-weight: 700; diff --git a/tests/diy-card-qr-style.test.js b/tests/diy-card-qr-style.test.js index 9f3f77d..59badc9 100644 --- a/tests/diy-card-qr-style.test.js +++ b/tests/diy-card-qr-style.test.js @@ -182,6 +182,13 @@ test('self: miniConfig 透传头像+二维码新六字段', () => { assert.match(selfSrc, /qrTipShow:\s*v\.qrTipShow/); }); +test('show: 头像开关(面板「显示头像」, 默认显示, 关后头部只留姓名/职位)', () => { + assert.match(showSrc, /showAvatarBlock\(\)\s*\{\s*return flagOn\(this\.c\.showAvatar,\s*true\)/); + assert.match(showSrc, //); + // 反例形态: 不允许出现常显头像(绕过开关) + assert.ok(!showSrc.includes(' { assert.match(showSrc, /class="card-qr"/); assert.match(showSrc, /\$util\.img\(card\.qr_url\)/);