232 lines
6.4 KiB
JavaScript
232 lines
6.4 KiB
JavaScript
import { forEach } from "lodash";
|
||
|
||
/**
|
||
* 延迟执行
|
||
* @param {Number} ms
|
||
* @returns
|
||
*/
|
||
export function sleep(ms) {
|
||
return new Promise(resolve => setTimeout(resolve, ms));
|
||
}
|
||
/**
|
||
* 解析查询字符串
|
||
* @param {string} urlOrQueryString
|
||
* @returns {Object} 查询参数对象
|
||
*/
|
||
export function parseQueryString(urlOrQueryString) {
|
||
// 如果传入的是完整URL(如 "/path?name=value"),提取查询部分
|
||
let queryString = urlOrQueryString;
|
||
const questionMarkIndex = queryString.indexOf('?');
|
||
if (questionMarkIndex !== -1) {
|
||
queryString = queryString.slice(questionMarkIndex + 1);
|
||
}
|
||
|
||
const params = {};
|
||
if (!queryString) return params; // 如果没有查询参数,返回空对象
|
||
|
||
const pairs = queryString.split('&');
|
||
for (const pair of pairs) {
|
||
const [key, value] = pair.split('=');
|
||
// 解码 URI 组件,并处理无值情况(如 "key" 而不是 "key=value")
|
||
params[key] = value ? decodeURIComponent(value) : '';
|
||
}
|
||
|
||
return params;
|
||
}
|
||
|
||
/**
|
||
* 显示确认弹窗
|
||
* @param {Object} options 弹窗选项
|
||
* @param {String} options.title 弹窗标题
|
||
* @param {String} options.content 弹窗内容
|
||
* @param {String} options.confirmText 确认按钮文字
|
||
* @param {String} options.cancelText 取消按钮文字
|
||
* @returns {Promise} 返回Promise对象,resolve中返回{confirm: Boolean},表示是否点击了确认按钮
|
||
*/
|
||
export function showModal(options = {}) {
|
||
return new Promise((resolve) => {
|
||
uni.showModal({
|
||
title: options.title || '提示',
|
||
content: options.content || '',
|
||
confirmText: options.confirmText || '确定',
|
||
cancelText: options.cancelText || '取消',
|
||
success(res) {
|
||
resolve(res);
|
||
},
|
||
fail() {
|
||
resolve({
|
||
confirm: false
|
||
});
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param {String} title
|
||
* @param {String} content
|
||
* @returns
|
||
*/
|
||
export function showModalConfirm(title, content) {
|
||
return new Promise((resolve) => {
|
||
uni.showModal({
|
||
title: title || '提示',
|
||
content: content || '',
|
||
confirmText: '确定',
|
||
cancelText: '取消',
|
||
showCancelButton: true,
|
||
showConfirmButton: true,
|
||
confirmColor: '#1989FA',
|
||
cancelColor: '#9F9F9F',
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
resolve(true);
|
||
} else if (res.cancel) {
|
||
resolve(false);
|
||
}
|
||
}
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* 显示提示信息
|
||
* @param {*} title 提示信息
|
||
* @param {*} icon 图标
|
||
* @param {*} duration 提示时长
|
||
* @returns
|
||
*/
|
||
export function showToast(title, icon = "none", duration = 1500) {
|
||
return new Promise((resolve) => {
|
||
uni.showToast({
|
||
title: title || '',
|
||
icon: icon || 'none',
|
||
duration: duration,
|
||
success: () => {
|
||
resolve(true);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 显示加载中
|
||
* @param {String} title 加载中文字
|
||
* @returns {Promise} 返回Promise对象,resolve中返回true
|
||
*/
|
||
export function showLoading(title = "加载中...") {
|
||
return new Promise((resolve) => {
|
||
uni.showLoading({
|
||
title: title,
|
||
success: () => {
|
||
resolve(true);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 隐藏加载中
|
||
* @returns {Promise} 返回Promise对象,resolve中返回true
|
||
*/
|
||
export function hideLoading() {
|
||
return new Promise((resolve) => {
|
||
uni.hideLoading({
|
||
success: () => {
|
||
resolve(true);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
|
||
/**
|
||
* 请求订阅消息
|
||
* @param {Array} tmplIds 模板ID数组
|
||
* @returns {Promise} 返回Promise对象,resolve中返回订阅结果对象
|
||
*/
|
||
export function requestSubscribeMessage(tmplIds) {
|
||
return new Promise((resolve) => {
|
||
uni.requestSubscribeMessage({
|
||
tmplIds: tmplIds || [],
|
||
success(res) {
|
||
console.log('订阅消息授权结果:', res);
|
||
// if(res[''])
|
||
var data = {};
|
||
for (let i = 0; i < tmplIds.length; i++) {
|
||
if (res[tmplIds[i]] != null && res[tmplIds[i]] == "accept") {
|
||
data[tmplIds[i]] = true;
|
||
} else {
|
||
data[tmplIds[i]] = false;
|
||
}
|
||
}
|
||
console.log("订阅消息授权结果:", data);
|
||
|
||
resolve({
|
||
success: true,
|
||
result: data
|
||
});
|
||
},
|
||
fail(err) {
|
||
console.error('订阅消息授权失败:', err);
|
||
resolve({
|
||
success: false,
|
||
result: [],
|
||
error: err
|
||
});
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 微信支付
|
||
* @param {Object} orderInfo 支付订单信息对象
|
||
* @param {String} orderInfo.appid 微信开放平台应用AppId
|
||
* @param {String} orderInfo.noncestr 随机字符串
|
||
* @param {String} orderInfo.package 固定值 "Sign=WXPay"
|
||
* @param {String} orderInfo.partnerid 微信支付商户号
|
||
* @param {String} orderInfo.prepayid 统一下单订单号
|
||
* @param {Number} orderInfo.timestamp 时间戳(单位:秒)
|
||
* @param {String} orderInfo.sign 签名
|
||
* @returns {Promise} 返回Promise对象,resolve中返回支付结果对象
|
||
*/
|
||
export function requestPayment(orderInfo) {
|
||
return new Promise((resolve) => {
|
||
uni.requestPayment({
|
||
provider: "weixin",
|
||
...orderInfo,
|
||
success(res) {
|
||
console.log('微信支付成功:', res);
|
||
resolve({
|
||
success: true,
|
||
result: res
|
||
});
|
||
},
|
||
fail(err) {
|
||
console.error('微信支付失败:', err);
|
||
resolve({
|
||
success: false,
|
||
result: null,
|
||
error: err
|
||
});
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
let os = '';
|
||
/**
|
||
*
|
||
*/
|
||
export function getOS() {
|
||
if (os != '') {
|
||
return os;
|
||
}
|
||
// #ifdef APP-PLUS
|
||
const systemInfo = uni.getSystemInfoSync();
|
||
return systemInfo.platform === 'ios' ? 'ios' : 'android';
|
||
// #endif
|
||
|
||
return 'mp';
|
||
} |