ipink-util
Version:
util.js
176 lines (173 loc) • 4.89 kB
JavaScript
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 };