UNPKG

ipink-util

Version:

util.js

176 lines (173 loc) 4.89 kB
import { getEnv, ENV_TYPE } from './env.mjs'; import { win, getSdk } from './config.mjs'; import { showModal } from './toast.mjs'; import { parseQuery } from './url.mjs'; const transformEnv = (env) => { const envMap = { "release": 0, "develop": 1, "trial": 2 }; return envMap[env] || 0; }; const transformData = (obj) => { let arr = []; Object.keys(obj).forEach((v) => { if (v == "_globalData") return; arr.push(`${v}=${obj[v]}`); }); if (arr.length) { return arr.join("&"); } else { return ""; } }; const genJumpUrl = (pageUrl = "", params) => { if (!params) { params = {}; } let paramsStr = transformData(params); if (!paramsStr) return pageUrl; return `${pageUrl}${pageUrl.indexOf("?") > -1 ? "&" : "?"}${paramsStr}`; }; const navigateToMiniProgram = async (params) => { const { wxAppId, wxPageUrl, wxPageUrlParam = {}, alipayAppId, alipayPageUrl, alipayPageUrlParam = {}, appName, appId, path, pageUrlParam = {}, extraData = {}, success, fail, useModal = true, dialogOption, version } = params; if (!params.wxAppId) params.wxAppId = appId; if (!params.wxPageUrl) params.wxPageUrl = path; if (!params.wxPageUrlParam) params.wxPageUrlParam = pageUrlParam; if (!params.alipayAppId) params.alipayAppId = appId; if (!params.alipayPageUrl) params.alipayPageUrl = path; if (!params.alipayPageUrlParam) params.alipayPageUrlParam = pageUrlParam; const env = getEnv(); if (!appName && (env === ENV_TYPE.WX || env === ENV_TYPE.APP)) return; if (win && typeof document !== "undefined" && env === ENV_TYPE.APP && win.iapp) { const miniUrl = genJumpUrl(wxPageUrl, wxPageUrlParam); iapp.launchMiniProgram({ options: { id: appName, path: path || miniUrl, type: transformEnv(version) } }); return; } if (win && win.location) { win.location.href = `${appName}:/${genJumpUrl(wxPageUrl, pageUrlParam)}`; return; } let sdk = getSdk(); if (sdk && typeof plus !== "undefined") { if (useModal) { const res = await showModal({ title: `即将打开${appName ? `"${appName}"` : "其他"}应用`, cancelText: "取消", confirmText: "允许", ...dialogOption || {} }); if (!res) return; } const miniUrl = genJumpUrl(path, pageUrlParam); launchAppProgram({ id: appName || "", path: path || miniUrl, type: transformEnv(version) }); } if (sdk && typeof my !== "undefined") { var url = genJumpUrl(params.alipayPageUrl, alipayPageUrlParam); let queryStr = alipayPageUrlParam._globalData || ""; let globalData = {}; if (queryStr) { globalData = parseQuery(decodeURIComponent(queryStr || "")); } my.navigateToMiniProgram({ appId: appId || alipayAppId || "", path: path || url, // @ts-ignore query: globalData, extraData, success: (res) => { success && success(res); }, fail: (res) => { fail && fail(); } }); } if (sdk && typeof wx !== "undefined") { var url = genJumpUrl(params.wxPageUrl, wxPageUrlParam); if (!useModal) { wxNavigateToMiniProgram(appId || wxAppId || "", path || url, extraData, success, fail); return; } showModal({ title: `即将打开${appName ? appName : "其他"}小程序`, showCancel: true, cancelText: "取消", confirmText: "确定", ...dialogOption, success(r) { if (r.cancel) { fail && fail(); } else { wxNavigateToMiniProgram(appId || wxAppId || "", path || url, extraData, success, fail); } dialogOption?.success && dialogOption.success(); }, fail: () => { dialogOption?.fail && dialogOption.fail(); } }); } }; function wxNavigateToMiniProgram(appId, path, extraData, success, fail, version = "release") { let sdk = getSdk(); let params = { appId, path, extraData, version, success(res) { success && success(res); }, fail(res) { fail && fail(); } }; if (sdk) { typeof uni !== "undefined" ? uni.navigateToMiniProgram(params) : wx.navigateToMiniProgram(params); } } function launchAppProgram(options) { const enumMiniProgramType = { WX: "weixin", MY: "my" }; const miniProgramType = options.miniProgramType || enumMiniProgramType.WX; plus.share.getServices((arr = []) => { const weixinShare = arr.find((v) => v.id == miniProgramType); if (weixinShare && miniProgramType == enumMiniProgramType.WX) { weixinShare.launchMiniProgram({ id: options.id, type: options.type, path: options.path, ...options }); } }, (e) => { console.log("获取分享服务失败: " + JSON.stringify(e)); }); } export { genJumpUrl, navigateToMiniProgram };