365 lines
7.2 KiB
JavaScript
365 lines
7.2 KiB
JavaScript
|
|
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
|
|
} |