import qrcode from './qrcode.js'
// import barcode from './barcode.js'
import { get, post } from './http.js'
const formatTime = (date) => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return `${[year, month, day].map(formatNumber).join('/')} ${[
hour,
minute,
second
]
.map(formatNumber)
.join(':')}`
}
const formatNumber = (n) => {
n = n.toString()
return n[1] ? n : `0${n}`
}
const urlToObj = function (url) {
let obj = {}
let str = url.slice(url.indexOf('?') + 1)
let arr = str.split('&')
for (let i = 0; i < arr.length; i++) {
let arr_temp = arr[i].split('=')
obj[arr_temp[0]] = arr_temp[1]
}
return obj
}
const removeCss = function (content) {
let reg = /(style|class)="[^"]+"/gi
let img = /]+>/gi
let res
if (img.test(content)) {
res = content.match(img)
for (let i = 0; i < res.length; i++) {
console.log(res[i].replace(reg, ''))
content = content.replace(res[i], res[i].replace(reg, ''))
}
}
// (/\ {
if (callBackList.length == 0) {
console.log('倒计时结束 关闭定时器')
clearInterval(timer_)
timer_ = null
}
callBackList.forEach((item, index) => {
item.currentTime--
var h = parseInt(item.currentTime / 3600) //小时
var m = parseInt((item.currentTime / 60) % 60) //分钟
var s = parseInt(item.currentTime % 60) //当前的秒
let obj = {
h,
m,
s,
currentTime: item.currentTime
}
item.fn(obj)
if (item.currentTime <= 0) {
callBackList.splice(index, 1)
}
})
}, 1000)
}
}
const addTime = function (callback, currentTime) {
if (currentTime) {
callBackList.push({ fn: callback, currentTime })
console.log('第' + callBackList.length + '个倒计时开启')
if (!timer_) {
startTimer()
}
}
}
const removeTime = function (fn) {
for (var i = 0; i < callBackList.length; i++) {
let item = callBackList[i]
if (item.fn == fn) {
console.log('清除倒计时~')
callBackList.splice(i, 1)
}
}
}
function toQueryPair(key, value) {
if (typeof value == 'undefined') {
return `${key}=&`
}
return `${key}=${value}&`
}
/**
* 插件内部是根据width, height参数的rpx值来进行绘画
* 把数字转换成条形码
*/
// function toBarcode(canvasId, code, width, height) {
// barcode.code128(wx.createCanvasContext(canvasId), code, width, height)
// }
/**
* 把数字转换成二维码
*/
function toQrcode(canvasId, code, width, height) {
let pixelRatio1 = 750 / wx.getSystemInfoSync().windowWidth
qrcode.api.draw(code, {
ctx: wx.createCanvasContext(canvasId),
width: width / pixelRatio1,
height: height / pixelRatio1
})
}
/**
* @description 函数节流: 每隔一段时间,只执行一次函数
* @param { Function } fn 需要延迟执行的函数
* @param { Number } interval 延迟执行的时间,默认值500ms
*/
function throttle(fn, interval = 200) {
// 记录定时器id
let timer = null // 是否是第一次调用
let isFirstTime = true
return function () {
const args = arguments
const _me = this // 第一次直接执行,改变标志,无需延迟
if (isFirstTime) {
fn.apply(_me, args)
return (isFirstTime = false)
} // 不是第一次 // 存在定时器,前面的延迟操作没有完成,直接返回,拒绝调用请求
if (timer) {
return false
} // 延迟执行
timer = setTimeout(() => {
clearTimeout(timer)
timer = null
fn.apply(_me, args)
}, interval)
}
}
/**
* @description 函数防抖: 延迟函数执行,并且不管触发多少次都只执行最后一次
* @param {Function} fn
* @param {Number} interval
*/
function debounce(fn, interval) {
let timer = null
let gapTime = interval || 200 //间隔时间,如果interval不传,则默认200ms
return function () {
clearTimeout(timer)
let context = this
let args = arguments //保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
timer = setTimeout(function () {
fn.call(context, args)
}, gapTime)
}
}
/**
* 店铺信息
* /api/store/info
*/
function getStoreInfo(store_id) {
return new Promise((resolve, reject) => {
get(
'api/store/info',
{
store_id
},
(res) => {
wx.setStorageSync('store_id', String(store_id))
getApp().globalData.storeData = res.data
resolve(res.data)
},
(err) => {
reject(err)
}
)
})
}
/**
* @description 用户点击行为统计 v2/api/user/user_click
* @param {string} type
* 1是推送的点击 2是订单详情点击 3是banner充值 4是上镜小V脸 5是banner新人体验活动 7是邀请 8是被邀请
*/
async function trackUserEvent(type) {
try {
let resp = await post('v2/api/user/user_click', { type })
if (resp === 200) {
// 数据上报成功
}
} catch (error) {
// 上报失败
console.log(error)
}
}
module.exports = {
formatTime,
urlToObj,
removeCss,
getPrePage,
objToParam,
addTime,
removeTime,
toQrcode,
throttle,
debounce,
getStoreInfo,
trackUserEvent
}