|
|
@ -1,6 +1,136 @@ |
|
|
export function buildHomeSharePath(targetPath) { |
|
|
const INVITE_CONTEXT_KEY = 'inviteShareContext' |
|
|
if (!targetPath) return '/pages/index/index' |
|
|
const INVITE_DEVICE_KEY = 'inviteDeviceId' |
|
|
return '/pages/index/index?targetPath=' + encodeURIComponent(targetPath) |
|
|
|
|
|
|
|
|
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) { |
|
|
export function buildGroupHomeSharePath(params) { |
|
|
@ -16,6 +146,7 @@ export function buildGroupHomeSharePath(params) { |
|
|
if (params.orderScene) { |
|
|
if (params.orderScene) { |
|
|
query.push('orderScene=' + encodeURIComponent(params.orderScene)) |
|
|
query.push('orderScene=' + encodeURIComponent(params.orderScene)) |
|
|
} |
|
|
} |
|
|
|
|
|
appendInviteParams(query, params, true) |
|
|
return '/pages/index/index?' + query.join('&') |
|
|
return '/pages/index/index?' + query.join('&') |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -30,6 +161,11 @@ export function buildGroupTargetPath(params) { |
|
|
if (params.orderScene) { |
|
|
if (params.orderScene) { |
|
|
targetPath += '&orderScene=' + encodeURIComponent(params.orderScene) |
|
|
targetPath += '&orderScene=' + encodeURIComponent(params.orderScene) |
|
|
} |
|
|
} |
|
|
|
|
|
const inviteQuery = [] |
|
|
|
|
|
appendInviteParams(inviteQuery, params, false) |
|
|
|
|
|
if (inviteQuery.length > 0) { |
|
|
|
|
|
targetPath += '&' + inviteQuery.join('&') |
|
|
|
|
|
} |
|
|
return targetPath |
|
|
return targetPath |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -68,6 +204,7 @@ export function normalizeShareTargetPath(value) { |
|
|
|
|
|
|
|
|
export function resolveHomeShareTarget(query) { |
|
|
export function resolveHomeShareTarget(query) { |
|
|
query = query || {} |
|
|
query = query || {} |
|
|
|
|
|
rememberInviteParams(query) |
|
|
if (query.shareType === 'group') { |
|
|
if (query.shareType === 'group') { |
|
|
return buildGroupTargetPath(query) |
|
|
return buildGroupTargetPath(query) |
|
|
} |
|
|
} |
|
|
@ -102,6 +239,7 @@ export function getEnterShareTarget(options) { |
|
|
const handledShareTargets = Object.create(null) |
|
|
const handledShareTargets = Object.create(null) |
|
|
|
|
|
|
|
|
export function stageShareEnter(options) { |
|
|
export function stageShareEnter(options) { |
|
|
|
|
|
rememberInviteParams(options && options.query) |
|
|
const targetPath = resolveMiniCodeSceneTarget(options && options.query && options.query.scene) || getEnterShareTarget(options) |
|
|
const targetPath = resolveMiniCodeSceneTarget(options && options.query && options.query.scene) || getEnterShareTarget(options) |
|
|
if (!targetPath) return { targetPath: '', alreadyHandled: false } |
|
|
if (!targetPath) return { targetPath: '', alreadyHandled: false } |
|
|
if (handledShareTargets[targetPath]) return { targetPath: '', alreadyHandled: true } |
|
|
if (handledShareTargets[targetPath]) return { targetPath: '', alreadyHandled: true } |
|
|
|