四零语境前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

173 lines
4.6 KiB

// 检验手机号格式
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
}