Files
小鱼开发 3bf5c948d8 Initial commit
2024-05-24 14:16:05 +08:00

389 lines
8.9 KiB
JavaScript

import log from 'log.js'
const app = getApp();
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(':')
}
/**
* 获取时间戳
* @param {*}
*/
const getTimestamp = () => {
return new Date().getTime()
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
const padding = (s, len) => {
len = len - (s + '').length
for (var i = 0; i < len; i++) {
s = '0' + s
}
return s
}
var DEFAULT_PATTERN = 'yyyy-MM-dd'
var SIGN_REGEXP = /([yMdhsm])(\1*)/g
const formatDate = {
formatYYMMDD: function (time) {
let date = new Date(time)
return date.toLocaleDateString().replace(RegExp('/', 'g'), '-') + ' 00:00:00'
},
format: function (date, pattern) {
pattern = pattern || DEFAULT_PATTERN
return pattern.replace(SIGN_REGEXP, function ($0) {
switch ($0.charAt(0)) {
case 'y':
return padding(date.getFullYear(), $0.length)
case 'M':
return padding(date.getMonth() + 1, $0.length)
case 'd':
return padding(date.getDate(), $0.length)
case 'w':
return date.getDay() + 1
case 'h':
return padding(date.getHours(), $0.length)
case 'm':
return padding(date.getMinutes(), $0.length)
case 's':
return padding(date.getSeconds(), $0.length)
}
})
}
}
const getNowTimeFormate = (TYPE) => {
var date = ''
switch (TYPE) {
case 'DAY':
date = formatDate.format(new Date())
// return date.slice(0, 4)+'-'+date.slice(4, 6)+'-'+date.slice(6, 8)
return date
break;
case 'MONTH':
date = formatDate.format(new Date(), 'yyyyMM')
return date.slice(0, 4) + '-' + date.slice(4, 6)
break;
case 'TIME':
date = formatDate.format(new Date(), 'yyyyMMddhhmmss')
return date.slice(0, 4) + '-' + date.slice(4, 6) + '-' + date.slice(6, 8) + ' ' + date.slice(8, 10) + ':' + date.slice(10, 12) + ':' + date.slice(12, 14)
break;
}
}
/**
* 打开地图
*/
const openLocation = function (params) {
wx.openLocation({
latitude: params.latitude,
longitude: params.longitude,
name: params.name || '',
address: params.address || '',
scale: params.scale || 18
})
}
/**
* 提示框
*/
const $toast = function (message, time = 1500) {
return new Promise((resolve, reject) => {
wx.showToast({
title: message,
icon: 'none',
duration: time,
success: function (res) {
resolve(res)
}
})
})
}
/**
* 对话框
*/
const $modal = function (title, content, confirmText = '确定', cancelText = '取消') {
return new Promise((resolve, reject) => {
wx.showModal({
title: title,
content: content,
confirmText: confirmText,
cancelText: cancelText,
success: function (res) {
if (res.confirm) {
// 确认按钮点击
resolve(true)
} else if (res.cancel) {
// 取消按钮点击
resolve(false)
}
}
})
})
}
/**
* 获取状态栏高度
*/
const getStatusBarHeight = () => {
let barHeight = ''
wx.getSystemInfo({
success: function (res) {
barHeight = res.statusBarHeight
}
})
return barHeight
}
/**
* 获取当前路径
*/
function getCurrentPath() {
var pages = getCurrentPages() //获取加载的页面
var currentPage = pages[pages.length - 1] //获取当前页面的对象
return {
pages: pages, //获取所有页面
url: currentPage.route, //当前页面url
options: currentPage.options //如果要获取url中所带的参数可以查看options
}
}
/**
* 获取路由跳转过来的数据
*/
function getRouterData(URL) {
return wx.getStorageSync('router-/' + URL + '-params')
}
/**
* 防止多次重复点击 (函数节流)
*/
function throttle(fn, gapTime) {
if (gapTime == null || gapTime == undefined) {
gapTime = 1000
}
let _lastTime = null
// 返回新的函数
return (function (e) {
// console.log(this)
let _nowTime = +new Date()
if (_nowTime - _lastTime > gapTime || !_lastTime) {
// fn.apply(this, arguments) //将this和参数传给原函数
fn(this, e) //上方法不可行的解决办法 改变this和e
_lastTime = _nowTime
}
})()
}
/*函数防抖*/
function debounce(fn, interval) {
var timer;
var gapTime = interval || 200; //间隔时间,如果interval不传,则默认200ms
return function () {
clearTimeout(timer);
var context = this;
var args = arguments; //保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
timer = setTimeout(function () {
fn.call(context, args);
}, gapTime);
};
}
//去掉前后空格
function trim(s) {
return s.toString().replace(/(^\s*)|(\s*$)/g, "");
}
//过滤所以空格
function filterSpace(s) {
return s.toString().replace(/\ +/g, "");
}
function getNumber(str) {
return str.toString().match(/\d+(\.\d{0,2})?/)[0]
}
function compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}
/**
* 内存报警
* 报警后,使用reLaunch,并记录当前页面及页面栈
*/
function memoryWarning() {
wx.onMemoryWarning(function () {
let getPath = getCurrentPath()
wx.reportAnalytics('outofmemory', getPath)
wx.reportMonitor('0', 500)
wx.reLaunch(getPath.url)
app.printErrorClient('filteroutofmemory')
})
}
/**
* 取消内存报警
*/
function offMemoryWarning() {
if (wx.canIUse('offMemoryWarning')) {
wx.offMemoryWarning()
app.printErrorClient('offmemory')
} else {
app.printErrorClient('offmemorylowversion')
log.warn('当前微信版本' + wx.getSystemInfoSync().SDKVersion + '过低,无法使用该功能,请升级到最新微信版本后重试。')
}
}
/**
* 设置底部导航选中
*/
function setBottomTabbar(page, isUnRead, that) {
if (typeof that.getTabBar === 'function' &&
that.getTabBar()) {
that.getTabBar().setData({
show: true,
selected: page,
isUnRead: isUnRead || false
})
}
}
/**
* 页面滚动到指定的上一个dom位置
*/
function scrollPageToDom(el, extraHeight = 0) {
let query = wx.createSelectorQuery()
query.select(el).boundingClientRect()
query.selectViewport().scrollOffset()
query.exec(function (res) {
wx.pageScrollTo({
scrollTop: res[0].height + extraHeight,
duration: 100
});
})
}
/**
* 页面滚动到dom指定位置
* 注:如果该dom滚动到顶部之后,他的top就变成0了。
* 再下次滚动的话,就会依照0来滚动,也就变成回到顶部了
*/
function scrollPageToDomForTop(el, extraHeight = 0) {
let query = wx.createSelectorQuery()
query.select(el).boundingClientRect()
query.selectViewport().scrollOffset()
query.exec(function (res) {
wx.pageScrollTo({
scrollTop: res[0].top + extraHeight,
duration: 100
});
})
}
let scrollFloatwindow_id = null;
//悬浮窗滚动方法判断方法
function scrollFloatwindow(e, that) {
if (e.scrollTop <= 0) {
//最顶部
e.scrollTop = 0;
} else if (e.scrollTop > that.data.scrollHeight) {
//最底部
e.scrollTop = that.data.scrollHeight;
}
if (scrollFloatwindow_id) clearTimeout(scrollFloatwindow_id);
//给scrollTop重新赋值
scrollFloatwindow_id = setTimeout(() => {
that.setData({
istrue_scroll: e.scrollTop > that.data.scrollTop || e.scrollTop >= that.data.scrollHeight,
scrollTop: e.scrollTop
});
}, 50);
}
let monitor = {
reportMonitor: function (id, value) {
if (wx.reportMonitor) {
wx.reportMonitor(id, value);
}
},
Error_Fail_Image: '1', //转化网络图片失败
Error_Req_Fail: '2',//网络请求失败
Error_Fail_Canvas: '3', //canvas转化失败
Error_Req_code_400: '4', //请求失败
Error_Req_code_401: '5', //非法参数
Error_Req_code_403: '6', //禁止访问
Error_Req_code_404: '7', //请求不存在
Error_Req_code_408: '8', //未登录
Error_Req_code_500: '9', //请求失败
};
module.exports = {
log,
formatTime,
openLocation,
$toast,
$modal,
getStatusBarHeight,
getCurrentPath,
getRouterData,
throttle,
debounce,
getNowTimeFormate,
getTimestamp,
trim,
filterSpace,
getNumber,
memoryWarning,
offMemoryWarning,
setBottomTabbar,
scrollPageToDom,
scrollPageToDomForTop,
scrollFloatwindow,
monitor
// printErrorClient
}