// 检验手机号格式 const checkPhone = (phone) => { if (!phone || !/^1[3-9]\d{9}$/.test(phone)) { return false } return true; } // 转换时间戳为yyyy-mm-dd // params: 时间戳 // return yyyy-mmm-dd const formatTime = (time) => { if (!time) { return '时间格式错误,需要传入时间戳' } const date = new Date(time) const year = date.getFullYear() const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0') return `${year}-${month}-${day}` } // 计算yyyy-mm-dd与当前时间的差值 // params: yyyy-mm-dd格式的字符串 // return: 差值(天) const calculateDateDifference = (dateString) => { if (!dateString) { return '时间格式错误,需要传入yyyy-mm-dd格式的字符串' } // 传入值为yyyy-mm-dd格式的字符串 const inputDate = new Date(dateString) // 化为时间戳 // const inputTime = inputDate.getTime() const currentDate = new Date() const timeDifference = inputDate - currentDate if (!(currentDate.setHours(0, 0, 0, 0) - inputDate.setHours(0, 0, 0, 0))) { return 0 } // 如果为负 返回-1 if (timeDifference < 0) { return -1 } // 计算天数 const dayDifference = Math.ceil(timeDifference / (1000 * 60 * 60 * 24)) return dayDifference } // #ifdef H5 import jWeixin from './lib/jweixin-module.js' // #endif /** * 微信支付方法 - 支持小程序和公众号多环境 * @param {Object} paymentData - 支付数据对象 * @param {Function} successCallback - 成功回调函数 * @param {Function} failCallback - 失败回调函数 * @returns {Promise} - H5环境返回Promise,小程序环境直接执行回调 */ const wxPay = (paymentData, successCallback, failCallback) => { // #ifdef MP-WEIXIN // 小程序环境使用uni.requestPayment uni.requestPayment({ provider: 'wxpay', timeStamp: paymentData.timeStamp, nonceStr: paymentData.nonceStr, package: paymentData.packageValue, signType: paymentData.signType, paySign: paymentData.paySign, success: (res) => { console.log('小程序支付成功:', res) uni.showToast({ title: '支付成功', icon: 'success' }) if (successCallback) { successCallback(res) } }, fail: (err) => { console.log('小程序支付失败:', err) if (err.errMsg === 'requestPayment:fail cancel') { uni.showToast({ title: '支付已取消', icon: 'none' }) } else { uni.showToast({ title: '支付失败', icon: 'none' }) } if (failCallback) { failCallback(err) } } }) // #endif // #ifdef H5 // H5环境使用微信JSSDK return new Promise((resolve, reject) => { // JSSDK配置成功后的回调 jWeixin.ready(function() { // 调用微信支付接口 jWeixin.chooseWXPay({ appId: paymentData.appId, timestamp: paymentData.timeStamp, // 支付签名时间戳 nonceStr: paymentData.nonceStr, // 支付签名随机串 package: paymentData.packageValue, // 统一支付接口返回的prepay_id参数值 signType: paymentData.signType, // 签名类型,默认为MD5 paySign: paymentData.paySign, // 支付签名 success: function(result) { console.log('H5支付成功:', result) uni.showToast({ title: '支付成功', icon: 'success' }) if (successCallback) { successCallback(result) } resolve(result) }, fail: function(error) { console.log('H5支付失败:', error) uni.showToast({ title: '支付失败', icon: 'none' }) if (failCallback) { failCallback(error) } reject(error) }, cancel: function(error) { console.log('H5支付取消:', error) uni.showToast({ title: '支付已取消', icon: 'none' }) const cancelError = { type: 'cancel', ...error } if (failCallback) { failCallback(cancelError) } reject(cancelError) } }) }) // JSSDK配置失败处理 jWeixin.error(function(error) { console.log('JSSDK配置失败:', error) uni.showToast({ title: 'JSSDK配置失败', icon: 'none' }) const configError = { type: 'config_error', ...error } if (failCallback) { failCallback(configError) } reject(configError) }) }) // #endif } export { checkPhone, formatTime, calculateDateDifference, wxPay }