feat(card): 增加有效期展示功能,支持独立成块样式与简介样式配置
This commit is contained in:
@@ -115,7 +115,34 @@ test('A6: pickShareCardId 无 dataset 时回落 storage(朋友圈通道)', () =>
|
||||
assert.equal(pickShareCardId({ from: 'menu' }), 'C_FROM_STORAGE');
|
||||
});
|
||||
|
||||
test('A7: pickShareCardId 两路都没有 → 空', () => {
|
||||
test('A6b: 第三级兜底 — storage 空且落地 query 带 card_id → 续传(右上角转发 S5-2)', () => {
|
||||
// 场景: 访客经分享落地(query 带 card_id), 未点过任何分享按钮(storage 空),
|
||||
// 直接右上角「···」转发 → 应自动续传落地页的源头卡
|
||||
const uni = makeUni();
|
||||
const { pickShareCardId } = loadCardShare(uni, () => ([{
|
||||
route: 'pages_tool/index/diy',
|
||||
options: { id: '3', card_id: 'C_LANDING' },
|
||||
}]));
|
||||
assert.equal(pickShareCardId({ from: 'menu' }), 'C_LANDING');
|
||||
assert.equal(pickShareCardId(null), 'C_LANDING');
|
||||
});
|
||||
|
||||
test('A6c: 三级优先级 dataset > storage > 落地 query', () => {
|
||||
const uni = makeUni();
|
||||
const { rememberShareCardId, pickShareCardId } = loadCardShare(uni, () => ([{
|
||||
route: 'pages_tool/index/diy',
|
||||
options: { card_id: 'C_LANDING' },
|
||||
}]));
|
||||
// query 在, 但 dataset 最准 → dataset 胜
|
||||
assert.equal(pickShareCardId({ target: { dataset: { cardId: 'C_DATASET' } } }), 'C_DATASET');
|
||||
// storage 在(刚点过按钮), dataset 无 → storage 胜(按钮意图更近)
|
||||
rememberShareCardId('C_FROM_BTN');
|
||||
assert.equal(pickShareCardId(null), 'C_FROM_BTN');
|
||||
// 都没有 → 落地 query
|
||||
assert.equal(pickShareCardId({ from: 'menu' }), 'C_LANDING');
|
||||
});
|
||||
|
||||
test('A7: pickShareCardId 三路都没有 → 空', () => {
|
||||
const uni = makeUni();
|
||||
const { pickShareCardId } = loadCardShare(uni, () => []);
|
||||
assert.equal(pickShareCardId({ from: 'menu' }), '');
|
||||
@@ -280,6 +307,80 @@ test('B9: 行为级 — 朋友圈无 card_id 时原样回落', () => {
|
||||
assert.equal(hooks.onShareTimeline.call(ctx), ctx.mpShareData.timeLine);
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// B+. H5 公众号分享链接补 card_id(setPublicShare, S10-1)
|
||||
// =============================================================
|
||||
|
||||
/** 把 diy.js 的 setPublicShare 抠出来真跑(同 loadDiyShareHooks 思路) */
|
||||
function loadDiySetPublicShare(share) {
|
||||
const src = read('common/js/diy.js');
|
||||
const start = src.indexOf('setPublicShare() {');
|
||||
const end = src.indexOf('onPageScroll(e) {');
|
||||
assert.ok(start > 0 && end > start, '未能定位 diy.js 的 setPublicShare');
|
||||
// 剥注释后, 丢掉切片尾部的外层 methods 闭括号(setPublicShare 自己的 '}' 是倒数第二个)
|
||||
let body = strip(src.slice(start, end));
|
||||
body = body.slice(0, body.lastIndexOf('}')).trim();
|
||||
const factory = new Function('routeQueryValue', 'appendPathParam', 'return {' + body + '};');
|
||||
// 工厂返回 { setPublicShare: fn } 对象, 这里直接交出方法本体
|
||||
return factory(share.routeQueryValue, share.appendPathParam).setPublicShare;
|
||||
}
|
||||
|
||||
test('B10: diy.js 引入 routeQueryValue 且 setPublicShare 补 card_id', () => {
|
||||
const src = read('common/js/diy.js');
|
||||
assert.match(src, /import\s*\{[^}]*routeQueryValue[^}]*\}\s*from\s*['"]@\/common\/js\/card-share\.js['"]/,
|
||||
'未引入 card-share.js 的 routeQueryValue');
|
||||
const stripped = strip(src);
|
||||
const start = stripped.indexOf('setPublicShare()');
|
||||
const end = stripped.indexOf('onPageScroll');
|
||||
assert.ok(start > 0 && end > start, '未定位到 setPublicShare');
|
||||
const seg = stripped.slice(start, end);
|
||||
assert.match(seg, /routeQueryValue\('card_id'\)/, 'setPublicShare 未从落地 query 取 card_id');
|
||||
assert.match(seg, /appendPathParam\(shareUrl, 'card_id', shareCardId\)/, '分享链接未追加 card_id');
|
||||
});
|
||||
|
||||
test('B11: 行为级 — H5 落地带 card_id 时公众号分享链接续传', () => {
|
||||
const uni = makeUni();
|
||||
const share = loadCardShare(uni, () => ([{
|
||||
route: 'pages_tool/index/diy',
|
||||
options: { id: '3', card_id: 'C_1_shop_x' },
|
||||
}]));
|
||||
const setPublicShare = loadDiySetPublicShare(share);
|
||||
let captured = null;
|
||||
const ctx = {
|
||||
$config: { h5Domain: 'https://h5.example.com' },
|
||||
diyRoute: '/pages_tool/index/diy',
|
||||
id: 3,
|
||||
name: '',
|
||||
$util: { setPublicShare: d => { captured = d; }, img: s => s || '' },
|
||||
$langConfig: { getField: () => '标题' },
|
||||
diyData: { global: {} },
|
||||
siteInfo: null,
|
||||
};
|
||||
setPublicShare.call(ctx);
|
||||
assert.equal(captured.link, 'https://h5.example.com/pages_tool/index/diy?id=3&card_id=C_1_shop_x',
|
||||
'H5 分享链接未续传落地 card_id');
|
||||
});
|
||||
|
||||
test('B12: 行为级 — 裸 Tab(无 card_id)时 H5 分享链接行为零变化', () => {
|
||||
const uni = makeUni();
|
||||
const share = loadCardShare(uni, () => ([]));
|
||||
const setPublicShare = loadDiySetPublicShare(share);
|
||||
let captured = null;
|
||||
const ctx = {
|
||||
$config: { h5Domain: 'https://h5.example.com' },
|
||||
diyRoute: '/pages_tool/index/diy',
|
||||
id: 3,
|
||||
name: '',
|
||||
$util: { setPublicShare: d => { captured = d; }, img: s => s || '' },
|
||||
$langConfig: { getField: () => '标题' },
|
||||
diyData: { global: {} },
|
||||
siteInfo: null,
|
||||
};
|
||||
setPublicShare.call(ctx);
|
||||
assert.equal(captured.link, 'https://h5.example.com/pages_tool/index/diy?id=3',
|
||||
'无 card_id 时链接应保持原样(不得追加空参数)');
|
||||
});
|
||||
|
||||
// =============================================================
|
||||
// C. 名片基件的分享按钮(diy-card-mini.vue)
|
||||
// =============================================================
|
||||
|
||||
Reference in New Issue
Block a user