91 lines
2.6 KiB
TypeScript
91 lines
2.6 KiB
TypeScript
import { SubscriptionMessageApi } from '@/api/user'
|
||
import Taro from '@tarojs/taro'
|
||
import dayjs from 'dayjs'
|
||
import { useEffect, useRef, useState } from 'react'
|
||
|
||
//倒计时hook
|
||
export const useTimeCountDown = () => {
|
||
const [showTime, setShowTime] = useState({
|
||
DD: '',
|
||
HH: '',
|
||
MM: '',
|
||
SS: '',
|
||
})
|
||
const [timeStatus, setTimeStatus] = useState<0 | 1 | 2>(0) //倒计时状体 0:倒计时未开始 1:倒计时中, 2:倒计时已结束
|
||
const timeObj: any = useRef()
|
||
const endTime = useRef('')
|
||
const onStart = (val = '') => {
|
||
console.log('time:::', val)
|
||
endTime.current = val
|
||
if (endTime.current) {
|
||
clearInterval(timeObj.current)
|
||
timeObj.current = setInterval(() => {
|
||
count_down()
|
||
}, 1000)
|
||
}
|
||
}
|
||
useEffect(() => {
|
||
return () => {
|
||
clearInterval(timeObj.current)
|
||
}
|
||
}, [])
|
||
const count_down = () => {
|
||
var startData = dayjs()
|
||
var endDate = dayjs(endTime.current)
|
||
setTimeStatus(() => 1)
|
||
if (startData >= endDate) {
|
||
clearInterval(timeObj.current)
|
||
setShowTime((e) => ({ ...e, DD: '00', HH: '00', MM: '00', SS: '00' }))
|
||
setTimeStatus(() => 2)
|
||
return false
|
||
}
|
||
var _dd = endDate.diff(startData, 'day')
|
||
var _hh = endDate.diff(startData, 'hour')
|
||
var _mm = endDate.diff(startData, 'minute')
|
||
var _ss = endDate.diff(startData, 'second')
|
||
// 转换
|
||
var hh = _hh - _dd * 24
|
||
var mm = _mm - _hh * 60
|
||
var ss = _ss - _mm * 60
|
||
// 格式化
|
||
var DD = ('00' + _dd).slice(-2)
|
||
var HH = ('00' + hh).slice(-2)
|
||
var MM = ('00' + mm).slice(-2)
|
||
var SS = ('00' + ss).slice(-2)
|
||
console.log('endTime::', `${DD}-${HH}-${MM}-${SS}`)
|
||
setShowTime((e) => ({ ...e, DD, HH, MM, SS }))
|
||
}
|
||
return {
|
||
showTime,
|
||
onStart,
|
||
timeStatus,
|
||
}
|
||
}
|
||
|
||
//订阅消息hook
|
||
export const UseSubscriptionMessage = () => {
|
||
const { fetchData: fetchDataMessage } = SubscriptionMessageApi()
|
||
const openSubscriptionMessage = ({ orderId = 0, scenes = 0 }: { orderId?: number; scenes: number }) => {
|
||
return new Promise(async (resolve) => {
|
||
let params: { sale_order_id?: number; scenes?: number } = {}
|
||
orderId && (params.sale_order_id = orderId)
|
||
params.scenes = scenes
|
||
let res = await fetchDataMessage(params)
|
||
if (res.success && res.data.TemplateID && res.data.TemplateID.length > 0) {
|
||
Taro.requestSubscribeMessage({
|
||
tmplIds: res.data.TemplateID,
|
||
complete: function (res) {
|
||
resolve(res)
|
||
},
|
||
})
|
||
} else {
|
||
resolve(true)
|
||
}
|
||
})
|
||
}
|
||
|
||
return {
|
||
openSubscriptionMessage,
|
||
}
|
||
}
|