uniapp-ZHSQ/utils/index.js

280 lines
7.1 KiB
JavaScript

const RequsetUrl = 'https://huishang.magicany.cc/api/v1'; // 请求地址前缀
export const picUrl = 'https://huishang.magicany.cc'; // 图片地址前缀
/**
* @description 小程序跳转方法二次封装
* @method NavgateTo
* @param {String} path - 跳转的目标页面路径
* @param {Object} options - 配置选项对象
* @param {Boolean} options.isLogin - 是否需要校验登录态,默认为 true
*/
export const NavgateTo = (path, options = {}) => {
const { isLogin = true, } = options;
const userId = uni.getStorageSync('userId'); // 假设这个方法存在并返回用户信息
if (isLogin) {
if (!userId) {
uni.navigateTo({ url: '/pages/login/login' })
return
} else {
uni.navigateTo({
url: path
});
return;
}
}
uni.navigateTo({ url: path })
}
/**
* 封装请求方法
* @param {string} url 请求地址
* @param {string} method 请求方法
* @param {Object} data 请求参数
* @param {Object} options 配置选项对象
* @returns {Promise} 返回一个Promise对象
*/
export const request = (url, method = 'POST', data = {}, options = {}) => {
console.log('options', options);
const { silent = true, nested = false } = options;
let ctoken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZWFsZXJfaWQiOjAsImV4cCI6MTc0NDg1MDI4NywiaW1nIjoiIiwibXNob3BfaWQiOjAsIm9wZW5faWQiOiJvV2MxODY3b2dYZ0RHektneWtkLUpTM0dVT2tFIiwicm9sZV9pZCI6MSwidXNlcl9pZCI6MTAzLCJ1c2VyX25hbWUiOiLlvq7kv6HnlKjmiLciLCJ3c2hvcF9pZCI6MH0.TpANZ_g9UHz6HqyTTk7-2BazRB-gQcK_CsgdLqEBXSQ';
// if (options.token) {
// ctoken = options.token;
// } else {
// ctoken = uni.getStorageSync('ctoken'); // 后续接口强依赖强校验该字段
// }
if (silent) {
uni.showLoading({
title: '加载中',
mask: true
})
};
let params = {
user_id: uni.getStorageSync('userId') || 67,
...data,
}
return new Promise((resolve, reject) => {
uni.request({
url: RequsetUrl + url,
method: method,
data: params,
header: {
'Content-Type': 'application/json',
'Authorization': ctoken,
// ...header,
},
success: (res) => {
console.log('请求成功,接口返参', res);
if (res.statusCode == 401) {
uni.showModal({
title: '提示',
content: '请登录后查看',
confirmText:"去登陆",
complete: (res) => {
console.log('11131', res)
if (res.cancel) {
uni.hideLoading();
return
}
if (res.confirm) {
uni.navigateTo({
url: '/pages/login/login',
})
}
}
})
return
}
if (res.statusCode === 200) {
if (silent) {
uni.hideLoading();
}
if (options?.nested) {
let data = {
...res.data,
}
console.log('走这里?')
resolve(data); // 请求成功
return;
}
resolve(res.data.data); // 请求成功
} else {
uni.hideLoading();
uni.showToast({
title: res.data.msg || '请求失败',
icon: 'none'
})
reject({
code: res.statusCode,
message: res.data.msg || '请求失败',
data: res.data,
});
}
},
fail: (err) => {
uni.hideLoading();
uni.showToast({
title: res.data.msg || '请求失败',
icon: 'none'
})
reject({
code: -1,
message: '接口异常,请稍后重试',
error: err,
});
},
});
});
}
/**
* 校验手机号是否合法
* @param {string} option 请求方法
* @returns {Boolean} 手机号是否正确
*/
export const isPhone = (option) => {
if(option.length != 11){
return false
}
if (!(/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/.test(option))) {
return false
} else {
return true
}
}
/**
* 精确的浮点数运算
* @param {number} num1 - 第一个数字
* @param {number} num2 - 第二个数字
* @param {string} operator - 运算符,支持 '+', '-', '*', '/', '+='
* @returns {number} - 运算结果
*/
export const floatCalculate = (num1, num2, operator) => {
// 获取小数位数
function getPrecision(num) {
const str = num.toString();
const decimalIndex = str.indexOf('.');
return decimalIndex === -1 ? 0 : str.length - decimalIndex - 1;
}
// 计算放大倍数
const precision1 = getPrecision(num1);
const precision2 = getPrecision(num2);
const maxPrecision = Math.max(precision1, precision2);
const factor = Math.pow(10, maxPrecision);
// 将数字转换为整数
const intNum1 = Math.round(num1 * factor);
const intNum2 = Math.round(num2 * factor);
// 根据运算符进行计算
let result;
switch (operator) {
case '+':
result = (intNum1 + intNum2) / factor;
break;
case '-':
result = (intNum1 - intNum2) / factor;
break;
case '*':
result = (intNum1 * intNum2) / (factor * factor);
break;
case '/':
result = intNum1 / intNum2;
break;
case '+=':
result = (intNum1 + intNum2) / factor;
break;
default:
throw new Error('不支持的运算符');
}
return result;
}
/**
* 图片上传
* @param {string} filename - 图片上传地址
* @param {Function} fn - 接口回调函数
*/
export const upload = (filename, fn) => {
uni.uploadFile({
url: RequsetUrl + '/public/upload-image',
filePath: filename,
name: 'image',
formData: {
'uid': uni.getStorageSync('uid'),
},
success: (f) => {
fn(f.data);
},
fail: (res) => {
console.log(res);
uni.showToast({
title: '上传文件失败',
icon: 'none'
})
},
complete: () => {}
});
}
//
export const menuButtonInfo = () => {
const systemInfo = uni.getSystemInfoSync();
console.log('123133123131131', systemInfo);
const platform = systemInfo.platform;
console.log('执行不到后边', systemInfo.uniPlatform);
if (platform === 'ios') {
// TODO: ios待测试
return {
height: systemInfo.statusBarHeight,
top: 44,
};
}
if (platform === 'android') {
console.log('走到这列 andro')
return {
height: systemInfo.statusBarHeight,
top: 44, // 自定义导航栏默认高度
};
}
if (systemInfo.uniPlatform === 'mp-weixin') {
console.log('走到这列 小程序');
// 微信小程序、支付宝小程序等,平台标识以 'mp-' 开头
return uni.getMenuButtonBoundingClientRect()
} else {
return 'Unknown';
}
}
/**
* 获取服务供应商
* @param {string} opt - 服务类型
* @returns {Promise} 返回一个Promise对象
*/
export const getProviderPromise = (opt) => {
return new Promise((resolve, reject) => {
uni.getProvider({
service: opt,
success: (res) => {
console.log('获取支付服务提供商成功:', res.provider);
resolve(res.provider);
},
fail: (err) => {
console.error('获取支付服务提供商失败:', err);
reject(err);
}
});
});
}