yfs/common/platform/H5Platform.js
2025-06-08 20:23:01 +08:00

247 lines
8.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import BasePlatform from './BasePlatform';
import eruda from 'eruda';
import { parseQueryString } from '@/common/util';
class H5Platform extends BasePlatform {
constructor() {
super();
this.code = 'WEB_H5';
this.env = 'h5';
// 简单初始化
let erudaInstance = uni.getStorageSync("erudaInstance");
if (erudaInstance != null && erudaInstance != "") {
this.startDeb();
}
// eruda.init();
}
getPayData(url, data) {
data['quitUrl'] = escape(window.location.href);
data['returnUrl'] = escape(window.location.href);
console.log('处理数据', data);
return data;
}
pay({
data
}, event) {
console.log('支付1111');
return new Promise((resolve) => {
console.log(data);
// 检查是否已存在同ID的表单如果存在则先删除
const existingForm = document.getElementById('alipaysubmit');
if (existingForm) {
existingForm.parentNode.removeChild(existingForm);
}
// 创建一个临时div元素
const tempDiv = document.createElement('div');
// 将data作为HTML插入到div中假设data是表单的HTML字符串
tempDiv.innerHTML = data;
// 将表单添加到body中
document.body.appendChild(tempDiv.firstChild);
// 获取表单并提交
const form = document.getElementById('alipaysubmit');
if (form) {
form.submit();
resolve({
success: true
});
} else {
resolve({
success: false,
message: '表单创建失败'
});
}
});
}
share({
title,
desc,
image,
url
}) {
console.log(`H5分享${title} - ${desc}`);
// 调用浏览器原生分享(如果可用)
if (navigator.share) {
return navigator.share({
title,
text: desc,
url
});
}
// 降级方案
alert(`请手动分享:${url}`);
}
/**
* 选择地址
* @returns
*/
chooseAddress() {
return new Promise((resolve, reject) => {
uni.navigateTo({
url: '/pages/other/choose_address',
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
selectAddress: function (data) {
console.log(data, {
userName: data.address.receiver_name,
telNumber: data.address.receiver_phone,
detailed_address: data.address.detailed_address
})
resolve({
userName: data.address.receiver_name,
telNumber: data.address.receiver_phone,
detailed_address: data.address.detailed_address
});
},
someEvent: function (data) {
console.log(data)
}
},
success: function (res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', {
data: 'data from starter page'
})
}
})
});
}
downloadFile(url) {
return new Promise((resolve, reject) => {
try {
// 创建一个隐藏的a标签
const a = document.createElement('a');
a.href = url;
a.download = url.split('/').pop() || 'download'; // 使用URL中的文件名或默认名称
a.style.display = 'none';
document.body.appendChild(a);
a.click(); // 触发下载
document.body.removeChild(a); // 清理DOM
resolve({
success: true
});
} catch (error) {
console.error('下载失败:', error);
// 降级方案,直接打开
window.location.href = url;
resolve({
success: false,
error: error.message
});
}
});
}
AppLaunch(options) {
console.log("AppLaunch", options);
if (options.query) {
let query = options.query;
if (query['version'] != null) {
uni.setStorageSync('version', query['version']);
}
if (query['method'] != null && query['method'] == "alipay.trade.wap.pay.return" && query[
'out_trade_no'] != null) {
//支付宝跳转过来的
//重定向url
let url = window.location.origin + window.location.pathname;
let out_trade_no = query['out_trade_no'];
uni.setStorageSync('pay_order_num', out_trade_no);
// alert('存入订单编号' + out_trade_no)
const delKey = ['charset', 'out_trade_no', 'method', 'total_amount', 'sign', 'trade_no',
'auth_app_id', 'version', 'app_id', 'sign_type', 'seller_id', 'timestamp'
];
for (const key of delKey) {
delete query[key];
}
let str = Object.entries(query)
.map(([key, value]) => `${key}=${value}`)
.join('&')
if (str != '') {
url += "?" + str;
}
console.log('支付成功,重定向页面。', url);
window.location.href = url;
}
}
if (window.location.pathname == "/" || window.location.pathname == "/pages/index/index") {
uni.switchTab({
url: '/pages/shouye/index'
});
}
}
getOrderNo(event) {
return new Promise((resolve, reject) => {
//window.location.search
let query = parseQueryString(window.location.search);
if (query['method'] != null && query['method'] == "alipay.trade.wap.pay.return" && query[
'out_trade_no'] != null) {
//表示还在支付请求中,还未开始重定向
console.log('window.location.search', window.location.search);
resolve(null);
return;
}
let pay_order_num = uni.getStorageSync('pay_order_num');
// alert("获取订单编号"+pay_order_num)
setTimeout(() => {
uni.removeStorageSync('pay_order_num');
}, 2000)
resolve(pay_order_num);
});
}
/**
* 重写获取用户中心菜单列表处理H5特有的菜单需求
* @returns {Array} 菜单项数组
*/
getUserMenuList() {
// 获取基础菜单列表
const baseMenuList = super.getUserMenuList();
// H5环境下可能需要修改某些菜单项的行为
return baseMenuList.map(item => {
// 示例在H5环境下可能需要特殊处理某些菜单项
if (item.id === 6) { // 加入福利群菜单
return {
...item,
// 重新绑定处理函数可能需要增加H5特有的逻辑
handler: (menuItem, context) => {
this.handleJoinGroup(menuItem, context);
// 在H5环境下可能需要额外的处理比如尝试复制群号等
}
};
}
return item;
});
}
/**
* 开启调试
*/
startDeb() {
// 简单初始化
window.erudaInstance = eruda.init();
uni.setStorageSync("erudaInstance", true);
}
/**
* 关闭调试
*/
closeDeb() {
if (window.erudaInstance) {
// 完全销毁Eruda实例从DOM中移除
window.erudaInstance.destroy();
}
uni.removeStorageSync("erudaInstance")
}
getVersion() {
return '1.0.0';
}
}
export default H5Platform;