yfs/common/platform/NewWebAppPlatform.js
2025-07-07 14:01:37 +08:00

147 lines
5.0 KiB
JavaScript
Raw Permalink 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 H5Platform from './H5Platform';
import { webAppPay, webAppShare } from '@/common/webapp.js'
import { parseQueryString } from '@/common/util'
function versionToNumber(versionString) {
// 移除所有点号并转换为数字
return parseInt(versionString.split('.').join(''), 10);
}
class NewWebAppPlatform extends H5Platform {
constructor() {
super();
this.code = 'WEB_APP_ANDROID';
this.env = 'web_app';
this.app_version = 100;
this.app_os = null;
let location = window.location.href;
const params = parseQueryString(location);
if (params['version'] != null) {
uni.setStorageSync('app_version', params['version']);
let _appversion = params['version'] ?? "1.0.0";
if (_appversion.indexOf(".") > -1) {
_appversion = versionToNumber(_appversion);
this.app_version = _appversion;
}
}
if (params['os'] != null) {
let app_os = params['os'];
uni.setStorageSync('app_os', app_os);
this.app_os = app_os;
}
if (this.app_os == null) {
if (uni.getStorageSync('app_version') != null) {
let _appversion = uni.getStorageSync('app_version') ?? "1.0.0";
if (_appversion.indexOf(".") > -1) {
_appversion = versionToNumber(_appversion);
this.app_version = _appversion;
}
}
if (uni.getStorageSync('app_os') != null) {
this.app_os = uni.getStorageSync('app_os');
}
console.log('加载数据', uni.getStorageSync('app_version'), uni.getStorageSync('app_os'));
}
}
share({ title, desc, image, url }) {
console.log(`APP分享${title} - ${desc} - ${image} - ${url}`);
if (this.app_version == 100) {
uni.setClipboardData({
data: url
});
this.$c.msg("链接已复制,快去分享吧~");
return;
}
return webAppShare(title, desc, image, url);
// 降级方案
// alert(`请手动分享:${url}`);
}
pay({
data
}, event) {
console.log(this, event);
return new Promise(async (resolve, reject) => {
const res = await webAppPay(data);
if (!res) {
uni.showToast({
title: '取消支付',
icon: 'none',
duration: 500,
success: () => {
/* 取消订单 */
resolve('cancel')
}
});
return;
}
uni.showToast({
title: '支付成功',
icon: 'success',
duration: 500,
success: () => {
resolve('success')
}
})
});
}
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 });
}
});
}
/**
* 重写获取用户中心菜单列表,添加微信小程序特有菜单
* @returns {Array} 菜单项数组
*/
getUserMenuList() {
// 获取基础菜单列表
const baseMenuList = super.getUserMenuList();
// 添加客服菜单项(仅微信小程序)
// 将客服菜单插入到第二个位置
return [...baseMenuList.slice(0, baseMenuList.length - 1), ...baseMenuList.slice(baseMenuList.length - 1)];
}
getVersion() {
return uni.getStorageSync('version') == '' ? '1.0.0' : uni.getStorageSync('version');
}
/**
* 获取功能权限
*/
getPermission(functionName) {
const appPermission = {
wxLogin: 101
};
let _functionVersion = appPermission[functionName];
if (_functionVersion != null) {
//如果当前app权限大于等于功能权限版本则返回true
console.log('验证功能权限' + functionName, "功能要求版本:" + _functionVersion, "当前app版本" + this.app_version, "当前功能是否满足:" + (this.app_version >= _functionVersion));
return this.app_version >= _functionVersion;
}
return false;
}
}
export default NewWebAppPlatform;