mahjong_group/common/utils.js
2025-09-16 03:35:03 +08:00

232 lines
6.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 { 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';
}