From b6240b7fb4189549a987b51f12c37127c1d0731b Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Thu, 29 Oct 2026 13:50:31 +0800 Subject: [PATCH] 1 --- utils/sharePath.js | 144 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 141 insertions(+), 3 deletions(-) diff --git a/utils/sharePath.js b/utils/sharePath.js index 89393d6..e97dd77 100644 --- a/utils/sharePath.js +++ b/utils/sharePath.js @@ -1,6 +1,136 @@ -export function buildHomeSharePath(targetPath) { - if (!targetPath) return '/pages/index/index' - return '/pages/index/index?targetPath=' + encodeURIComponent(targetPath) +const INVITE_CONTEXT_KEY = 'inviteShareContext' +const INVITE_DEVICE_KEY = 'inviteDeviceId' + +function isBlank(value) { + return value === undefined || value === null || String(value).trim() === '' +} + +function readCurrentRegionId() { + try { + const area = uni.getStorageSync('area') + if (!area) return '' + const data = typeof area === 'string' ? JSON.parse(area) : area + return data && data.id ? String(data.id) : '' + } catch (e) { + return '' + } +} + +function appendParam(query, key, value) { + if (isBlank(value)) return + query.push(key + '=' + encodeURIComponent(String(value))) +} + +export function getInviteDeviceId() { + let deviceId = '' + try { + deviceId = uni.getStorageSync(INVITE_DEVICE_KEY) || '' + } catch (e) {} + if (deviceId) return deviceId + deviceId = 'dev_' + Date.now() + '_' + Math.random().toString(36).slice(2, 12) + try { + uni.setStorageSync(INVITE_DEVICE_KEY, deviceId) + } catch (e) {} + return deviceId +} + +export function getCurrentInviteParams() { + return { + inviterId: uni.getStorageSync('id') || '', + regionId: readCurrentRegionId() + } +} + +export function normalizeInviteParams(params) { + params = params || {} + const inviterId = params.inviterId || params.inviteUserId || '' + const regionId = params.regionId || params.inviteRegionId || '' + return { + inviterId: isBlank(inviterId) ? '' : String(inviterId), + regionId: isBlank(regionId) ? '' : String(regionId) + } +} + +function resolveInviteParams(params, useCurrentFallback) { + const invite = normalizeInviteParams(params) + if ((!invite.inviterId || !invite.regionId) && useCurrentFallback) { + const current = getCurrentInviteParams() + if (!invite.inviterId) invite.inviterId = current.inviterId + if (!invite.regionId) invite.regionId = current.regionId + } + return invite +} + +function appendInviteParams(query, params, useCurrentFallback) { + const invite = resolveInviteParams(params, useCurrentFallback) + appendParam(query, 'inviterId', invite.inviterId) + appendParam(query, 'regionId', invite.regionId) +} + +export function rememberInviteParams(params) { + const invite = normalizeInviteParams(params) + if (!invite.inviterId || !invite.regionId) return invite + try { + uni.setStorageSync(INVITE_CONTEXT_KEY, invite) + } catch (e) {} + return invite +} + +export function getStoredInviteParams() { + try { + const stored = uni.getStorageSync(INVITE_CONTEXT_KEY) + if (!stored) return { inviterId: '', regionId: '' } + return normalizeInviteParams(typeof stored === 'string' ? JSON.parse(stored) : stored) + } catch (e) { + return { inviterId: '', regionId: '' } + } +} + +export function parseQueryString(queryString) { + const result = {} + String(queryString || '').split('&').forEach((item) => { + if (!item) return + const pair = item.split('=') + const key = pair[0] + if (!key) return + const value = pair.slice(1).join('=') + try { + result[key] = decodeURIComponent(value || '') + } catch (e) { + result[key] = value || '' + } + }) + return result +} + +export function extractInviteParamsFromUrl(url) { + const value = String(url || '') + const queryIndex = value.indexOf('?') + if (queryIndex === -1) return { inviterId: '', regionId: '' } + return normalizeInviteParams(parseQueryString(value.slice(queryIndex + 1))) +} + +export function buildInviteHomeSharePath(params) { + params = params || {} + const query = ['shareType=invite'] + if (!isBlank(params.tabIndex)) { + appendParam(query, 'tabIndex', params.tabIndex) + } + appendInviteParams(query, params, true) + return '/pages/index/index?' + query.join('&') +} + +export function buildHomeSharePath(targetPath, params) { + const inviteQuery = [] + appendInviteParams(inviteQuery, params || {}, true) + if (!targetPath) { + return inviteQuery.length > 0 ? '/pages/index/index?' + inviteQuery.join('&') : '/pages/index/index' + } + let finalTargetPath = targetPath + if (inviteQuery.length > 0) { + finalTargetPath += (finalTargetPath.indexOf('?') === -1 ? '?' : '&') + inviteQuery.join('&') + } + return '/pages/index/index?targetPath=' + encodeURIComponent(finalTargetPath) } export function buildGroupHomeSharePath(params) { @@ -16,6 +146,7 @@ export function buildGroupHomeSharePath(params) { if (params.orderScene) { query.push('orderScene=' + encodeURIComponent(params.orderScene)) } + appendInviteParams(query, params, true) return '/pages/index/index?' + query.join('&') } @@ -30,6 +161,11 @@ export function buildGroupTargetPath(params) { if (params.orderScene) { targetPath += '&orderScene=' + encodeURIComponent(params.orderScene) } + const inviteQuery = [] + appendInviteParams(inviteQuery, params, false) + if (inviteQuery.length > 0) { + targetPath += '&' + inviteQuery.join('&') + } return targetPath } @@ -68,6 +204,7 @@ export function normalizeShareTargetPath(value) { export function resolveHomeShareTarget(query) { query = query || {} + rememberInviteParams(query) if (query.shareType === 'group') { return buildGroupTargetPath(query) } @@ -102,6 +239,7 @@ export function getEnterShareTarget(options) { const handledShareTargets = Object.create(null) export function stageShareEnter(options) { + rememberInviteParams(options && options.query) const targetPath = resolveMiniCodeSceneTarget(options && options.query && options.query.scene) || getEnterShareTarget(options) if (!targetPath) return { targetPath: '', alreadyHandled: false } if (handledShareTargets[targetPath]) return { targetPath: '', alreadyHandled: true }