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.
126 lines
3.4 KiB
126 lines
3.4 KiB
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)
|
|
}
|