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