import env from '@/env/index.js' import store from '@/store/index.js' import { isDate } from './is.js' /** * 日期格式化,样例 yyyy-mm-dd hh:MM:ss * @param date Date 需要转换的日期 * @param fmt string 转化的格式 yyyy-mm-dd hh:MM:ss */ export const dateTimeFormat = (date, fmt) => { if (!isDate(date)) { date = new Date(date) } if (!date || isNaN(date.getTime())) { throw new Error('日期不正确') } let ret const opt = { 'y+': date.getFullYear().toString(), // 年 'm+': (date.getMonth() + 1).toString(), // 月 'd+': date.getDate().toString(), // 日 'h+': date.getHours().toString(), // 时 'M+': date.getMinutes().toString(), // 分 's+': date.getSeconds().toString() // 秒 } for (let k in opt) { ret = new RegExp('(' + k + ')').exec(fmt) if (ret) { fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')) } } return fmt } /** * 创建websocket * @param {*} data * @value {string} pageInfo 页面信息 * @value {true} retry 是否重连,默认false * @returns 一个websocket实例 */ export const makeSocket = async ({ pageInfo = '', retry = false }) => { const socket = { sockTask: null, close: function () { this.sockTask.close({ code: 1000 }) closeFlag = true }, onMessage: function () {} } let limitedNum = 0 let closeFlag = false let timer = null async function createSocket() { let url = '' // if (env == 'production') { // url = 'wss://api-client-yyt.qniao.cn/qn-websocket-service/wechatwebsock?token=' // } else if (env == 'test') { // url = 'wss://api-client-yyt-test.qniao.cn/qn-websocket-service/wechatwebsock?token=' // } if (env == 'production') { url = 'wss://api-client-yyt.qniao.cn/trading-center/wechatwebsock?token=' } else if (env == 'test') { url = 'wss://api-client-yyt-test.qniao.cn/trading-center/wechatwebsock?token=' } const token = store.state.qnToken const socketTask = await uni.connectSocket({ url: `${url}${token}`, header: { 'content-type': 'application/json' }, success: () => { console.log('websocket连接成功') }, fail: () => { console.log('websocket连接失败') } }) socketTask.onOpen(() => { console.log(pageInfo + ' onOpen') timer = setInterval(() => { socketTask.send({ data: 'ping' }) }, 10000) }) socketTask.onClose(() => { console.log(pageInfo + ' onClose') clearInterval(timer) timer = null if (!closeFlag && retry && limitedNum < 20) { limitedNum++ console.log('重连次数:' + limitedNum) createSocket() } }) socketTask.onError(() => { console.log(pageInfo + ' error') }) socket.sockTask = socketTask } await createSocket() if (socket) { socket.onMessage = (fn) => { socket.sockTask.onMessage((res) => { let data = JSON.parse(res.data) console.log(pageInfo + '接收到消息:', data) if (data.type != 'heartbeat') { fn(data) } }) } } return socket } /** * 正数的四舍五入 * @value {number} num 需要四舍五入的数字 * @value {number} precision 小数点后保留的位数 */ export function round(number, precision) { return Math.round(+number + 'e' + precision) / Math.pow(10, precision) }