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 } }