glhcp/business/utils/tools.js

365 lines
7.2 KiB
JavaScript
Raw Normal View History

2023-08-10 06:59:52 +00:00
import { baseURL } from '@/config/app.js'
import { ClientEnum } from '@/utils/enum'
import store from '@/store'
// 获取客户端
export const getClient = () => {
// 判断平台
let client = 1;
// #ifdef H5
if (navigator.userAgent.indexOf('Mobile')>-1){
client = 6
} else {
client = 5
}
// 判断是不是微信浏览器
let ua = navigator.userAgent.toLowerCase()
if (ua.match(/MicroMessenger/i) == "micromessenger"){
client = 2
}
// #endif
// #ifdef APP-PLUS
if(uni.getSystemInfoSync().platform=='android') {
client = 4
} else {
client = 3
}
// #endif
// #ifdef MP-WEIXIN
client = 1
// #endif
console.log(client)
return client;
}
//节流
export const trottle = (func, time = 1000) => {
let previous = new Date(0).getTime()
return (...args) => {
let now = new Date().getTime()
if (now - previous > time) {
func(args)
previous = now
}
}
}
//节流
export const debounce = (func, time = 1000, context) => {
let timer = null
return function (...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
timer = null
func.apply(context, args)
}, time)
}
}
//判断是否为微信环境
export function isWeixinClient() {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == "micromessenger") {
//这是微信环境
return true;
} else {
//这是非微信环境
return false;
}
}
//判断是否为安卓环境
export function isAndroid() {
let u = navigator.userAgent;
return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
}
//获取url后的参数 以对象返回
export function strToParams(str) {
var newparams = {}
for (let item of str.split('&')) {
newparams[item.split('=')[0]] = item.split('=')[1]
}
return newparams
}
//重写encodeURL函数
export function urlencode(str) {
str = (str + '').toString();
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
//一维数组截取为二维数组
export function arraySlice(data, array = [], optNum = 10) {
data = JSON.parse(JSON.stringify(data))
if (data.length <= optNum) {
data.length > 0 && array.push(data);
return array;
}
array.push(data.splice(0, optNum));
return arraySlice(data, array, optNum);
}
//对象参数转为以?&拼接的字符
export function paramsToStr(params) {
let p = '';
if (typeof params == 'object') {
p = '?'
for (let props in params) {
p += `${props}=${params[props]}&`
}
p = p.slice(0, -1)
}
return p
}
// 获取wxml元素
export function getRect(selector, all, context) {
return new Promise(function(resolve) {
let qurey = uni.createSelectorQuery();
if (context) {
qurey = uni.createSelectorQuery().in(context);
}
qurey[all ? 'selectAll' : 'select'](selector).boundingClientRect(function(rect) {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect);
}
if (!all && rect) {
resolve(rect);
}
}).exec();
});
}
// 轻提示
export function toast(info = {}, navigateOpt) {
let title = info.title || ''
let icon = info.icon || 'none'
let endtime = info.endtime || 2000
if (title) uni.showToast({
title: title,
icon: icon,
duration: endtime
})
if (navigateOpt != undefined) {
if (typeof navigateOpt == 'object') {
let tab = navigateOpt.tab || 1,
url = navigateOpt.url || '';
switch (tab) {
case 1:
//跳转至 table
setTimeout(function() {
uni.switchTab({
url: url
})
}, endtime);
break;
case 2:
//跳转至非table页面
setTimeout(function() {
uni.navigateTo({
url: url,
})
}, endtime);
break;
case 3:
//返回上页面
setTimeout(function() {
uni.navigateBack({
delta: parseInt(url),
})
}, endtime);
break;
case 4:
//关闭当前所有页面跳转至非table页面
setTimeout(function() {
uni.reLaunch({
url: url,
})
}, endtime);
break;
case 5:
//关闭当前页面跳转至非table页面
setTimeout(function() {
uni.redirectTo({
url: url,
})
}, endtime);
break;
}
} else if (typeof navigateOpt == 'function') {
setTimeout(function() {
navigateOpt && navigateOpt();
}, endtime);
}
}
}
//当前页面
export function currentPage() {
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
return currentPage || {};
}
//菜单跳转
export function menuJump(item) {
const {
is_tab,
link,
link_type
} = item
switch (link_type) {
case 1:
// 本地跳转
if (is_tab) {
uni.switchTab({
url: link
});
return;
}
uni.navigateTo({
url: link
});
break;
case 2:
// webview
uni.navigateTo({
url: "/pages/webview/webview?url=" + link
});
break;
case 3: // tabbar
}
}
export function uploadFile(path) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: baseURL + '/shopapi/Upload/image',
filePath: path,
name: 'file',
header: {
token: store.getters.token,
version: '1.2.1.20210717'
},
fileType: 'image',
cloudPath: '',
success: res => {
console.log('uploadFile res ==> ', res)
let data = JSON.parse(res.data);
if (data.code == 1) {
resolve(data.data);
} else {
reject()
}
},
fail: (err) => {
console.log(err)
reject()
}
});
});
}
// H5复制方法
export function copy(str) {
// #ifdef H5
let aux = document.createElement("input");
aux.setAttribute("value", str);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);
uni.showToast({
title: "复制成功",
})
// #endif
// #ifndef H5
uni.setClipboardData({
data: str.toString(),
})
// #endif
}
// 格式化输出价格
export function formatPrice({
price,
take = 'all',
prec = undefined
}) {
let [integer, decimals = ''] = (price + '').split('.');
// 小数位补
if (prec !== undefined) {
const LEN = decimals.length;
for (let i = prec - LEN; i > 0; --i) decimals += '0'
decimals = decimals.substr(0, prec)
}
switch (take) {
case 'int':
return integer;
case 'dec':
return decimals;
case 'all':
return integer + '.' + decimals;
}
}
// 将px转为prx并添加单位
export function px2rpx(value) {
if (!value) return 0
const rpxValue = value / (uni.upx2px(100) / 100)
return rpxValue;
}
/**
* @description 图片完整域名
* @param uri { string } 图片链接
* @return { string }
*/
export const getImageUri = (uri = '') => {
const oss_domain = store.state.app.config.oss_domain || ''
return oss_domain + uri
}
/**
* @description 获取不重复的id
* @param length { Number } id的长度
* @return { String } id
*/
export const getNonDuplicateID = (length = 8) => {
let idStr = Date.now().toString(36)
idStr += Math.random().toString(36).substr(3, length)
return idStr
}