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 = {}) => { const { silent = true } = options; let ctoken; 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'), ...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 >= 200 && res.statusCode < 300) { if (silent) { uni.hideLoading(); } resolve(res.data); // 请求成功 } else { if (silent) { uni.hideLoading(); } reject({ code: res.statusCode, message: res.data.message || '请求失败', data: res.data, }); } }, fail: (err) => { if (silent) { uni.hideLoading(); } 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: () => {} }); }