diff --git a/pwuniapp/common/share.js b/pwuniapp/common/share.js new file mode 100644 index 0000000..2d439f7 --- /dev/null +++ b/pwuniapp/common/share.js @@ -0,0 +1,171 @@ +// 已读取AGENTS.md +import { onShareAppMessage, onShareTimeline, onShow } from '@dcloudio/uni-app'; +import { onMounted } from 'vue'; + +const DEFAULT_SHARE_TITLE = '同城陪伴 · 专业游戏陪玩与生活陪伴'; +const DEFAULT_INDEX_PATH = '/pages/index/index'; + +/** + * 获取当前登录用户的邀请码/用户ID,用于分销裂变与邀请自动绑定 + */ +export function getShareInviterParams() { + try { + const uid = uni.getStorageSync('userId'); + if (uid) { + return { + inviterId: String(uid), + code: `PW${uid}` + }; + } + } catch (_) {} + return { + inviterId: '', + code: '' + }; +} + +/** + * 构造携带邀请人参数与页面参数的分享路径 (用于 onShareAppMessage) + */ +export function buildSharePath(basePath = DEFAULT_INDEX_PATH, extraParams = {}) { + const { inviterId, code } = getShareInviterParams(); + const params = { ...extraParams }; + if (inviterId && !params.inviterId) { + params.inviterId = inviterId; + } + if (code && !params.code) { + params.code = code; + } + + const queryParts = []; + for (const key of Object.keys(params)) { + const val = params[key]; + if (val !== undefined && val !== null && val !== '') { + queryParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(val)}`); + } + } + + const cleanBase = (basePath || DEFAULT_INDEX_PATH).split('?')[0]; + const queryStr = queryParts.join('&'); + return queryStr ? `${cleanBase}?${queryStr}` : cleanBase; +} + +/** + * 构造朋友圈分享的 query 参数字符串 (用于 onShareTimeline,微信规范 query 不带 ?) + */ +export function buildTimelineQuery(extraParams = {}) { + const { inviterId, code } = getShareInviterParams(); + const params = { ...extraParams }; + if (inviterId && !params.inviterId) { + params.inviterId = inviterId; + } + if (code && !params.code) { + params.code = code; + } + + const queryParts = []; + for (const key of Object.keys(params)) { + const val = params[key]; + if (val !== undefined && val !== null && val !== '') { + queryParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(val)}`); + } + } + return queryParts.join('&'); +} + +/** + * 显式唤起微信小程序分享菜单 (同时激活【转发给朋友】与【分享到朋友圈】) + */ +export function enableShareMenu() { + // #ifdef MP-WEIXIN + try { + if (uni.canIUse && uni.canIUse('showShareMenu')) { + uni.showShareMenu({ + withShareTicket: true, + menus: ['shareAppMessage', 'shareTimeline'] + }); + } + } catch (_) {} + // #endif +} + +/** + * 页面级分享统一 Composable (支持在 Vue3