chore:名片样式更改

This commit is contained in:
2026-10-13 15:39:56 +08:00
parent f2619ae3b6
commit 389d87b82c
4 changed files with 342 additions and 147 deletions

View File

@@ -280,7 +280,8 @@ test('端到端: 三端分享面板按钮矩阵(静态推导)', () => {
assert.ok(/@tap="copyLink"/.test(src), '复制链接应三端可用');
// 保存二维码: MP-WEIXIN + MP-HARMONY
// 浏览器分享: H5
// 发给好友: MP-WEIXIN(鸿蒙无转发菜单, 用复制链接代替)
// 发给好友: MP-WEIXIN, 且必须是原生 button(open-type=share) —— 普通 view 的 @tap
// 调不起转发面板(微信未开放该 API), 只能弹「请点击右上角···」的死胡同提示
const h5Btns = [];
const wxBtns = [];
const harmonyBtns = [];
@@ -289,23 +290,46 @@ test('端到端: 三端分享面板按钮矩阵(静态推导)', () => {
src.split('\n').forEach((line, i) => {
const b = blocks.find(b => i >= b.start && i <= b.end);
const cond = b ? b.cond : null;
if (!/ss-btn/.test(line)) return;
// 原生转发按钮没有 @tap, 统一记成 nativeShare 便于断言
const tm = line.match(/@tap="(\w+)"/);
if (!tm || !/ss-btn/.test(line)) return;
if (!cond) { h5Btns.push(tm[1]); wxBtns.push(tm[1]); harmonyBtns.push(tm[1]); return; }
if (condHits(cond, 'MP-WEIXIN')) wxBtns.push(tm[1]);
if (condHits(cond, 'MP-HARMONY')) harmonyBtns.push(tm[1]);
if (condHits(cond, 'H5')) h5Btns.push(tm[1]);
const token = tm ? tm[1] : (/open-type="share"/.test(line) ? 'nativeShare' : null);
if (!token) return;
if (!cond) { h5Btns.push(token); wxBtns.push(token); harmonyBtns.push(token); return; }
if (condHits(cond, 'MP-WEIXIN')) wxBtns.push(token);
if (condHits(cond, 'MP-HARMONY')) harmonyBtns.push(token);
if (condHits(cond, 'H5')) h5Btns.push(token);
});
assert.ok(wxBtns.includes('copyLink') && wxBtns.includes('saveQr') && wxBtns.includes('shareToFriend'),
`微信按钮矩阵: ${JSON.stringify(wxBtns)}`);
assert.ok(wxBtns.includes('copyLink') && wxBtns.includes('saveQr') && wxBtns.includes('nativeShare'),
`微信按钮矩阵(发给好友须为 nativeShare): ${JSON.stringify(wxBtns)}`);
assert.ok(!wxBtns.includes('shareToFriend'),
'「发给好友」不能退回 @tap 弹提示的死胡同, 必须原生 button 直接拉起转发面板');
assert.ok(harmonyBtns.includes('copyLink') && harmonyBtns.includes('saveQr'),
`鸿蒙按钮矩阵(无发给好友): ${JSON.stringify(harmonyBtns)}`);
assert.ok(!harmonyBtns.includes('shareToFriend'), '鸿蒙不应出现「发给好友」(无转发菜单)');
`鸿蒙按钮矩阵: ${JSON.stringify(harmonyBtns)}`);
assert.ok(!harmonyBtns.includes('nativeShare'), '鸿蒙元服务无转发菜单, 不应出现原生转发按钮');
assert.ok(h5Btns.includes('copyLink') && h5Btns.includes('h5Share'),
`H5 按钮矩阵: ${JSON.stringify(h5Btns)}`);
assert.ok(!h5Btns.includes('saveQr'), 'H5 不应出现「保存二维码」(无 saveImageToPhotosAlbum)');
});
// =============================================================
// 9.1 「发名片」主按钮: 微信端一键转发给好友
// =============================================================
test('发名片: 微信端原生 button 一键转发 + 分享链接预先就绪', () => {
const src = read('detail.vue');
const btnLine = src.split('\n').find(l => /send-btn/.test(l) && /open-type="share"/.test(l));
assert.ok(btnLine, 'detail.vue 应有「发名片」按钮(open-type="share")');
assert.ok(/<button/.test(btnLine),
'「发名片」必须是原生 <button> —— 普通 view 无法调起「发送给朋友」面板');
// 分享链接必须在转发前就绪: 右上角「···」转发与原生按钮都不经过 openShare()
assert.ok(/buildShareInfo\s*\(\)/.test(src), 'shareUrl/qrUrl 应由 buildShareInfo 统一生成');
const osm = src.match(/onShareAppMessage\(\)\s*\{([\s\S]*?)\n\t\}/);
assert.ok(osm, 'detail.vue 应声明 onShareAppMessage');
assert.ok(/buildShareInfo/.test(osm[1]), 'onShareAppMessage 内需兜底生成分享链接(否则中转页拿到空 url)');
assert.ok(!/请点击右上角/.test(src), '不应保留「请点击右上角···」的提示式分享');
});
// ============================================================
// 1.8.0 后台「选择链接」注册: PAGE_KEY_MAP ↔ pages.json 对齐
//