1、判断小程序是用户扫码进入的(携带参数),还剩用户直接进入的(没有参数)
// 获取当前页面栈
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
// 解码获取到的scene参数值,如:teamId=1&secret=SMhbE
const scene = decodeURIComponent(currentPage?.options?.scene) ||"";
// 进一步解析参数
let params = {};
// 将参数字符串按'&'分割成数组,然后对每一项进行处理
scene.split('&').forEach(item => {
// 对每一项按'='分割成key和value,并存入params对象中
// 解析后的 params:{
// secret: "SMhbE"
// teamId: "1"
// }
console.log(item);
let [key, value] = item.split('=');
params[key] = value;
});
//判断有无参数,来确定用户进入的方式
if (params?.seq) {
// uni.showToast({
// title: "是扫码进来的"
// });
console.log("是扫码进来的");
enterFunction.value = "scan";
seqCode.value = currentPage?.options?.scene; //seq%3D16
} else {
// uni.showToast({
// title: "是直接点进来的"
// });
console.log("是直接点进来的");
enterFunction.value = "search"
};
return params?.seq
app内部扫码获取参数
注意,这里遇到了一个电脑端扫码和手机端扫码的坑
电脑端扫码出来的参数是未解码地址,手机小程序端扫码出来的参数是已解码重新,所以新增一个判断参数是否解码
// 只允许通过相机扫码
uni.scanCode({
// onlyFromCamera: true,
success: function(res) {
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
console.log('地址' + res.path)
console.log(decodeURIComponent(res.path));
console.log("加密" + encodeURIComponent("seq=019"));
if (res.path.includes("%")) {
console.log("未解密");
// console.log(res.path.split("scene=")[1]);
console.log(decodeURIComponent(res.path.split("scene=")[1]));
let code = decodeURIComponent(res.path.split("scene=")[1]);
formData.value.shipCode = code.split("=")[1];
console.log(formData);
} else {
console.log("已解密");
// console.log(encodeURIComponent(res.path.split("scene=")[1]));
console.log(res.path.split("scene=")[1]);
let code = res.path.split("scene=")[1]
formData.value.shipCode = code.split("=")[1];
}
// uni.switchTab({
// url: '/'+decodeURIComponent(res.path)
// });
// if (res.path.includes("%")) {
// uni.redirectTo({
// // url: '/'+decodeURIComponent(res.path)
// url: '/pages/pay/index?' + "scene=" + res.path.split("scene=")[1]
// })
// } else {
// uni.redirectTo({
// // url: '/'+decodeURIComponent(res.path)
// // + res.path.split("scene=")[0]
// url: '/pages/pay/index?' + "scene=" + encodeURIComponent(res.path.split("scene=")[1])
// })
// }
},
fail: function(res) {
uni.showToast({
icon: "error",
title: "获取信息失败"
})
}
});
Comments | NOTHING