From a595a4ae1b8574a41600a318cc638a62f7f964e1 Mon Sep 17 00:00:00 2001 From: jing <1683105490@qq.com> Date: Fri, 23 Oct 2026 14:01:20 +0800 Subject: [PATCH] =?UTF-8?q?chore=EF=BC=9A=E5=BE=AE=E4=BF=A1=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=88=86=E4=BA=AB=E6=AD=A3=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/js/mp-share-default.js | 20 ++++++++++++++++++- components-diy/diy-card-common.js | 7 ++++--- components-diy/diy-card-list.vue | 4 ++-- components-diy/diy-card-mini.vue | 32 ++++++++++++++++++++++++++++-- components-diy/diy-card-self.vue | 19 +++++++++++++++++- components-diy/diy-card-show.vue | 29 +++++++++++++++++++++++++-- tests/diy-card-ab-visual.test.js | 3 ++- tests/diy-card-detail-jump.test.js | 9 +++++++-- 8 files changed, 109 insertions(+), 14 deletions(-) diff --git a/common/js/mp-share-default.js b/common/js/mp-share-default.js index e2d8e28..6d361ae 100644 --- a/common/js/mp-share-default.js +++ b/common/js/mp-share-default.js @@ -199,7 +199,25 @@ export default { * 全局默认 onShareAppMessage: * uni-app 规范:组件自身的钩子优先级 > mixin,因此已显式声明的页面不受影响。 */ - onShareAppMessage() { + onShareAppMessage(options) { + // 名片「发送名片」按钮(open-type="share")触发: dataset 携带名片信息 → 精准转发该名片 + // (覆盖默认 cfg 逻辑; 微信小程序无法在组件内直接定义转发, 只能由页面 onShareAppMessage 提供) + if ( + options && + options.from === 'button' && + options.target && + options.target.dataset && + options.target.dataset.cardId + ) { + const d = options.target.dataset; + const name = d.cardName || '我的名片'; + const img = (this.$util && this.$util.img ? this.$util.img(d.cardQr) : d.cardQr) || ''; + return { + title: name + ' 的电子名片', + path: '/pages_tool/card/detail?card_id=' + d.cardId, + imageUrl: img + }; + } // 命中禁用列表的页面:即使 wx.hideShareMenu 因某些原因没生效, // 这里直接 return undefined / 也不主动拼 cfg,让微信回退到默认行为 // (主防线是 wx.hideShareMenu,这里只是兜底) diff --git a/components-diy/diy-card-common.js b/components-diy/diy-card-common.js index 5425a92..bfab9d2 100644 --- a/components-diy/diy-card-common.js +++ b/components-diy/diy-card-common.js @@ -169,9 +169,9 @@ export function rowIconFor(field) { /** * 资料行点击动作: 由服务端下发的 href 派生(tel:/mailto:/url/空) - * tel: → 拨号 mailto: → 邮箱(H5) / 复制(其它端) - * http(s) → 复制链接 空 → 无动作(纯展示, 如地址/自定义) - * 返回 null 表示不可点; type 取值与父组件 doAct 的 tel/mail/copy 分支对齐 + * tel: → 拨号 mailto: → 邮箱(H5 调起 / 其它端复制引导) + * http(s) → web(跳转网站, 经 web-view 承载页) 空 → 无动作(纯展示, 如地址/自定义) + * 返回 null 表示不可点; type 取值与父组件 doAct 的 tel/mail/web/copy 分支对齐 */ export function rowActOf(row) { const href = String((row && row.href) || '').trim(); @@ -179,6 +179,7 @@ export function rowActOf(row) { if (!href || !value) return null; if (/^tel:/i.test(href)) return { type: 'tel', value: value }; if (/^mailto:/i.test(href)) return { type: 'mail', value: value }; + if (/^https?:\/\//i.test(href)) return { type: 'web', value: value }; return { type: 'copy', value: value }; } diff --git a/components-diy/diy-card-list.vue b/components-diy/diy-card-list.vue index 09925b7..5200230 100644 --- a/components-diy/diy-card-list.vue +++ b/components-diy/diy-card-list.vue @@ -22,7 +22,7 @@ - + {{ initialOf(item.name) }} @@ -35,7 +35,7 @@ - diff --git a/components-diy/diy-card-mini.vue b/components-diy/diy-card-mini.vue index 3a14b36..993dfbc 100644 --- a/components-diy/diy-card-mini.vue +++ b/components-diy/diy-card-mini.vue @@ -108,10 +108,20 @@ - + + + + + {{ detailBtnText || '发送名片' }} + @@ -121,7 +131,8 @@ 分享名片 客户打开链接即可查看名片并留言留资 - + {{ (card && card.wap_url) || '' }} @@ -455,6 +466,13 @@ export default { fail: () => uni.showToast({ title: '二维码下载失败', icon: 'none' }), }); }, + // 分享抽屉二维码: 点击放大预览(预览页长按必出「识别图中二维码」菜单, 比 image 直接长按更可靠) + previewQr() { + const url = (this.card && this.card.qr_url) || ''; + if (!url) return; + const src = this.$util.img(url); + uni.previewImage({ urls: [src], current: src }); + }, /** 二维码点击 → 预览名片(进详情页; qrTapPreview 开关控制, 默认开) */ onQrTap() { if (flagOn(this.c.qrTapPreview, true)) this.$emit('detail', this.card); @@ -779,6 +797,16 @@ export default { display: flex; align-items: center; justify-content: center; + /* 小程序端为