// import Config from './baseConfig.js'
|
// // import store from '@/store/index.js'
|
// // import JSEncrypt from 'jsencrypt'
|
// import Http from './http.js'
|
|
export default {
|
/**
|
* 页面跳转
|
* @param {string} to 跳转链接 /pages/index/index
|
* @param {Object} param 参数 {key : value, ...}
|
* @param {string} mode 模式
|
*/
|
redirectTo(to, param, mode) {
|
let url = to;
|
// console.log({"$store":store.state.$store.tabbarList.list})
|
let tabbarList = ['/pages/index/index', '/pages/orderList/orderList', '/pages/mine/mine']
|
for (let i = 0; i < tabbarList.length; i++) {
|
if (to.indexOf(tabbarList[i]) != -1) {
|
uni.switchTab({
|
url: url
|
})
|
return;
|
}
|
}
|
|
// // #ifdef H5
|
// window.history.pushState(null, null, url);
|
// // #endif
|
|
if (param != undefined) {
|
Object.keys(param).forEach(function(key) {
|
if (url.indexOf('?') != -1) {
|
url += "&" + key + "=" + param[key];
|
} else {
|
url += "?" + key + "=" + param[key];
|
}
|
});
|
}
|
switch (mode) {
|
case 'tabbar':
|
// 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
|
uni.switchTab({
|
url: url
|
})
|
break;
|
case 'redirectTo':
|
// 关闭当前页面,跳转到应用内的某个页面。
|
uni.redirectTo({
|
url: url
|
});
|
break;
|
case 'reLaunch':
|
// 关闭所有页面,打开到应用内的某个页面。
|
uni.reLaunch({
|
url: url
|
});
|
break;
|
default:
|
// 保留当前页面,跳转到应用内的某个页面
|
uni.navigateTo({
|
url: url
|
});
|
}
|
},
|
/**
|
* 图片路径转换
|
* @param {String} img_path 图片地址
|
* @param {Object} params 参数,针对商品、相册里面的图片区分大中小,size: big、mid、small
|
*/
|
// img(img_path, params) {
|
// var path = "";
|
// if (img_path && img_path != undefined && img_path != "") {
|
// if (params && img_path != this.getDefaultImage().default_goods_img) {
|
// // 过滤默认图
|
// let arr = img_path.split(".");
|
// let suffix = arr[arr.length - 1];
|
// arr.pop();
|
// arr[arr.length - 1] = arr[arr.length - 1] + "_" + params.size;
|
// arr.push(suffix);
|
// img_path = arr.join(".");
|
// }
|
// if (img_path.indexOf("http://") == -1 && img_path.indexOf("https://") == -1) {
|
// path = Config.imgDomain + "/" + img_path;
|
// } else {
|
// path = img_path;
|
// }
|
// }
|
// return path;
|
// },
|
/**
|
* 时间戳转日期格式
|
* @param {Object} timeStamp
|
*/
|
timeStampTurnTime(timeStamp, type = "") {
|
if (timeStamp != undefined && timeStamp != "" && timeStamp > 0) {
|
var date = new Date();
|
date.setTime(timeStamp * 1000);
|
var y = date.getFullYear();
|
var m = date.getMonth() + 1;
|
m = m < 10 ? ('0' + m) : m;
|
var d = date.getDate();
|
d = d < 10 ? ('0' + d) : d;
|
var h = date.getHours();
|
h = h < 10 ? ('0' + h) : h;
|
var minute = date.getMinutes();
|
var second = date.getSeconds();
|
minute = minute < 10 ? ('0' + minute) : minute;
|
second = second < 10 ? ('0' + second) : second;
|
if (type) {
|
return y + '-' + m + '-' + d;
|
} else {
|
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
|
}
|
|
} else {
|
return "";
|
}
|
},
|
/**
|
* 日期格式转时间戳
|
* @param {Object} timeStamp
|
*/
|
timeTurnTimeStamp(string) {
|
var f = string.split(' ', 2);
|
var d = (f[0] ? f[0] : '').split('-', 3);
|
var t = (f[1] ? f[1] : '').split(':', 3);
|
return (new Date(
|
parseInt(d[0], 10) || null,
|
(parseInt(d[1], 10) || 1) - 1,
|
parseInt(d[2], 10) || null,
|
parseInt(t[0], 10) || null,
|
parseInt(t[1], 10) || null,
|
parseInt(t[2], 10) || null
|
)).getTime() / 1000;
|
},
|
minutesBetweenDates(date1, date2) {
|
let dateOne = new Date(date1)
|
const oneMinute = 60 * 1000; // 1分钟的毫秒数
|
const difference = Math.abs(date2.getTime() - dateOne.getTime()); // 计算两个日期的毫秒差
|
return Math.floor(difference / oneMinute); // 将差异转换为分钟并向下取整
|
},
|
formatDate(dat, type, addNum) {
|
if (!dat) {
|
return '-'
|
}
|
let date = new Date(dat)
|
if (addNum) {
|
date = new Date(date.setDate(date.getDate() + addNum));
|
}
|
const year = date.getFullYear();
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
const day = date.getDate().toString().padStart(2, '0');
|
const hours = date.getHours().toString().padStart(2, '0');
|
const minutes = date.getMinutes().toString().padStart(2, '0');
|
if (type) {
|
return type=='riqi' ? `${month}-${day}`: `${year}-${month}-${day} ${hours}:${minutes}`;
|
}
|
return `${year}-${month}-${day}`;
|
},
|
/**
|
* 倒计时
|
* @param {Object} seconds 秒
|
*/
|
countDown(seconds) {
|
let [day, hour, minute, second] = [0, 0, 0, 0]
|
if (seconds > 0) {
|
day = Math.floor(seconds / (60 * 60 * 24))
|
hour = Math.floor(seconds / (60 * 60)) - (day * 24)
|
minute = Math.floor(seconds / 60) - (day * 24 * 60) - (hour * 60)
|
second = Math.floor(seconds) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
|
}
|
if (day < 10) {
|
day = '0' + day
|
}
|
if (hour < 10) {
|
hour = '0' + hour
|
}
|
if (minute < 10) {
|
minute = '0' + minute
|
}
|
if (second < 10) {
|
second = '0' + second
|
}
|
return {
|
d: day,
|
h: hour,
|
i: minute,
|
s: second
|
};
|
},
|
/**
|
* 数值去重
|
* @param {Array} arr 数组
|
* @param {string} field 字段
|
*/
|
unique(arr, field) {
|
const res = new Map();
|
return arr.filter((a) => !res.has(a[field]) && res.set(a[field], 1));
|
},
|
/**
|
* 判断值是否在数组中
|
* @param {Object} elem
|
* @param {Object} arr
|
* @param {Object} i
|
*/
|
inArray: function(elem, arr) {
|
return arr == null ? -1 : arr.indexOf(elem);
|
},
|
/**
|
* 获取某天日期
|
* @param {Object} day
|
*/
|
getDay: function(day) {
|
var today = new Date();
|
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
|
today.setTime(targetday_milliseconds);
|
|
const doHandleMonth = function(month) {
|
var m = month;
|
if (month.toString().length == 1) {
|
m = "0" + month;
|
}
|
return m
|
}
|
|
var tYear = today.getFullYear();
|
var tMonth = today.getMonth();
|
var tDate = today.getDate();
|
var tWeek = today.getDay();
|
var time = parseInt(today.getTime() / 1000);
|
tMonth = doHandleMonth(tMonth + 1);
|
tDate = doHandleMonth(tDate);
|
|
const week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
|
return {
|
't': time,
|
'y': tYear,
|
'm': tMonth,
|
'd': tDate,
|
'w': week[tWeek]
|
};
|
},
|
/**
|
* 图片选择加上传
|
* @param number num
|
* @param {Object} params
|
* @param {Object} callback
|
* @param string url
|
* return array
|
*/
|
upload: function(num, params, callback, url) {
|
// #ifdef H5
|
var app_type = this.isWeiXin() ? 'wechat' : 'h5';
|
var app_type_name = this.isWeiXin() ? '微信公众号' : 'H5';
|
// #endif
|
// #ifdef APP-PLUS
|
var app_type = 'app';
|
var app_type_name = 'APP';
|
// #endif
|
// #ifdef MP-WEIXIN
|
var app_type = 'weapp';
|
var app_type_name = '微信小程序';
|
// #endif
|
|
// #ifdef MP-ALIPAY
|
var app_type = 'aliapp';
|
var app_type_name = '支付宝小程序';
|
// #endif
|
|
// #ifdef MP-BAIDU
|
var app_type = 'baiduapp';
|
var app_type_name = '百度小程序';
|
// #endif
|
|
// #ifdef MP-TOUTIAO
|
var app_type = 'MP-TOUTIAO';
|
var app_type_name = '头条小程序';
|
// #endif
|
|
// #ifdef MP-QQ
|
var app_type = 'MP-QQ';
|
var app_type_name = 'QQ小程序';
|
// #endif
|
var data = {
|
token: uni.getStorageSync('token'),
|
app_type: app_type,
|
app_type_name: app_type_name
|
}
|
data = Object.assign(data, params);
|
|
// 请求参数加密
|
// if (Config.apiSecurity) {
|
// let jsencrypt = new JSEncrypt();
|
// jsencrypt.setPublicKey(Config.publicKey);
|
// let encrypt = encodeURIComponent(jsencrypt.encryptLong(JSON.stringify(data)));
|
// data = {
|
// encrypt
|
// };
|
// }
|
var imgs_num = num;
|
var _self = this;
|
uni.chooseImage({
|
count: imgs_num,
|
sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
|
sourceType: ['album', 'camera'], //从相册或者拍照
|
success: async function(res) {
|
const tempFilePaths = res.tempFilePaths;
|
var _data = data;
|
var imgs = [];
|
for (var i = 0; i < tempFilePaths.length; i++) {
|
var path = await _self.upload_file_server(tempFilePaths[i], _data, params.path,
|
url);
|
imgs.push(path);
|
}
|
typeof callback == 'function' && callback(imgs);
|
}
|
});
|
},
|
uploadVideo: function(num, params, callback, url) {
|
|
// #ifdef H5
|
var app_type = this.isWeiXin() ? 'wechat' : 'h5';
|
var app_type_name = this.isWeiXin() ? '微信公众号' : 'H5';
|
// #endif
|
// #ifdef APP-PLUS
|
var app_type = 'app';
|
var app_type_name = 'APP';
|
// #endif
|
// #ifdef MP-WEIXIN
|
var app_type = 'weapp';
|
var app_type_name = '微信小程序';
|
// #endif
|
|
// #ifdef MP-ALIPAY
|
var app_type = 'aliapp';
|
var app_type_name = '支付宝小程序';
|
// #endif
|
|
// #ifdef MP-BAIDU
|
var app_type = 'baiduapp';
|
var app_type_name = '百度小程序';
|
// #endif
|
|
// #ifdef MP-TOUTIAO
|
var app_type = 'MP-TOUTIAO';
|
var app_type_name = '头条小程序';
|
// #endif
|
|
// #ifdef MP-QQ
|
var app_type = 'MP-QQ';
|
var app_type_name = 'QQ小程序';
|
// #endif
|
var data = {
|
token: uni.getStorageSync('token'),
|
app_type: app_type,
|
app_type_name: app_type_name
|
}
|
data = Object.assign(data, params);
|
|
// 请求参数加密
|
// if (Config.apiSecurity) {
|
// let jsencrypt = new JSEncrypt();
|
// jsencrypt.setPublicKey(Config.publicKey);
|
// let encrypt = encodeURIComponent(jsencrypt.encryptLong(JSON.stringify(data)));
|
// data = {
|
// encrypt
|
// };
|
// }
|
var imgs_num = num;
|
var _self = this;
|
uni.chooseVideo({
|
count: imgs_num,
|
success: async function(res) {
|
let totalTime = res.duration
|
const tempFilePath = res.tempFilePath;
|
console.log(tempFilePath)
|
var _data = data;
|
uni.showLoading({
|
title: "上传中"
|
})
|
var path = await _self.upload_file_server(tempFilePath, _data, params.path, url);
|
console.log(path)
|
// path.totalTime = totalTime
|
typeof callback == 'function' && callback(path);
|
|
}
|
})
|
},
|
//上传
|
// upload_file_server(tempFilePath, data, path, url = "") {
|
// if (url) {
|
// var uploadUrl = Config.baseUrl + url
|
// } else {
|
// // if(path=='upload_img'||path=='upload_video'){
|
// // var uploadUrl = Config.baseUrl + '/api/works/' + path
|
// // }else{
|
// // var uploadUrl = Config.baseUrl + '/api/upload/' + path
|
// // }
|
// var uploadUrl = Config.baseUrl + '/api/upload/' + path
|
// }
|
// return new Promise((resolve, reject) => {
|
// uni.uploadFile({
|
// url: uploadUrl,
|
// filePath: tempFilePath,
|
// name: 'file',
|
// formData: data,
|
// success: function(res) {
|
// var path_str = JSON.parse(res.data);
|
// if (path_str.code >= 0) {
|
// if (path == 'upload_video') {
|
// resolve(path_str.data);
|
// } else {
|
// resolve(path_str.data.src);
|
// }
|
// } else {
|
// reject("error");
|
// }
|
// }
|
// });
|
|
// });
|
|
// },
|
/**
|
* 复制
|
* @param {Object} message
|
* @param {Object} callback
|
*/
|
copy(value, callback) {
|
// #ifdef H5
|
var oInput = document.createElement('input'); //创建一个隐藏input(重要!)
|
oInput.value = value; //赋值
|
document.body.appendChild(oInput);
|
oInput.select(); // 选择对象
|
document.execCommand("Copy"); // 执行浏览器复制命令
|
oInput.className = 'oInput';
|
oInput.style.display = 'none';
|
uni.hideKeyboard();
|
this.showToast({
|
title: '复制成功'
|
});
|
|
typeof callback == 'function' && callback();
|
// #endif
|
|
// #ifdef MP || APP-PLUS
|
uni.setClipboardData({
|
data: value,
|
success: () => {
|
typeof callback == 'function' && callback();
|
}
|
});
|
// #endif
|
},
|
/**
|
* 是否是微信浏览器
|
*/
|
isWeiXin() {
|
// #ifndef H5
|
return false;
|
// #endif
|
var ua = navigator.userAgent.toLowerCase();
|
if (ua.match(/MicroMessenger/i) == "micromessenger") {
|
return true;
|
} else {
|
return false;
|
}
|
},
|
/**
|
* 显示消息提示框
|
* @param {Object} params 参数
|
*/
|
showToast(params = {}) {
|
params.title = params.title || "";
|
params.icon = params.icon || "none";
|
params.position = params.position || 'bottom';
|
params.duration = 1500;
|
uni.showToast(params);
|
},
|
/**
|
* 检测苹果X以上的手机
|
*/
|
isIPhoneX() {
|
let res = uni.getSystemInfoSync();
|
if (res.model.search('iPhone X') != -1) {
|
return true;
|
}
|
return false;
|
},
|
//判断安卓还是iOS
|
isAndroid() {
|
let platform = uni.getSystemInfoSync().platform
|
if (platform == 'ios') {
|
return false;
|
} else if (platform == 'android') {
|
return true;
|
}
|
},
|
/**
|
* 深度拷贝对象
|
* @param {Object} obj
|
*/
|
deepClone(obj) {
|
const isObject = function(obj) {
|
return typeof obj == 'object';
|
}
|
|
if (!isObject(obj)) {
|
throw new Error('obj 不是一个对象!')
|
}
|
//判断传进来的是对象还是数组
|
let isArray = Array.isArray(obj)
|
let cloneObj = isArray ? [] : {}
|
//通过for...in来拷贝
|
for (let key in obj) {
|
cloneObj[key] = isObject(obj[key]) ? this.deepClone(obj[key]) : obj[key]
|
}
|
return cloneObj
|
},
|
refreshBottomNav() {
|
var bottomNav = uni.getStorageSync("bottom_nav");
|
bottomNav = JSON.parse(bottomNav);
|
for (var i = 0; i < bottomNav.list.length; i++) {
|
var item = bottomNav.list[i];
|
var obj = {
|
index: i
|
};
|
obj.text = item.title;
|
obj.iconPath = this.img(item.iconPath);
|
obj.selectedIconPath = this.img(item.selectedIconPath);
|
if (bottomNav.type == 1) {
|
// 图文
|
} else if (bottomNav.type == 2) {
|
// 图片
|
} else if (bottomNav.type == 3) {
|
// 文字
|
}
|
uni.setTabBarItem(obj);
|
}
|
},
|
/**
|
* 自定义模板的跳转链接
|
* @param {Object} link
|
*/
|
// diyRedirectTo(link, method) {
|
// if (link == null || link == '' || !link.wap_url) return;
|
// if (link.wap_url.indexOf('http') != -1) {
|
// this.$util.redirectTo('/otherpages/webview/webview', {
|
// link: encodeURIComponent(link.wap_url)
|
// });
|
// } else {
|
// var params = link.site_id ? {
|
// site_id: link.site_id
|
// } : {};
|
// this.redirectTo(link.wap_url);
|
// }
|
// },
|
/**
|
* 获取默认图
|
* @param {Object} link
|
*/
|
getDefaultImage() {
|
let defaultImg = uni.getStorageSync('default_img');
|
if (defaultImg) {
|
defaultImg = JSON.parse(defaultImg);
|
defaultImg.default_goods_img = this.img(defaultImg.default_goods_img);
|
defaultImg.default_headimg = this.img(defaultImg.default_headimg);
|
defaultImg.default_shop_img = this.img(defaultImg.default_shop_img);
|
defaultImg.default_category_img = this.img(defaultImg.default_category_img);
|
defaultImg.default_city_img = this.img(defaultImg.default_city_img);
|
defaultImg.default_supply_img = this.img(defaultImg.default_supply_img);
|
defaultImg.default_store_img = this.img(defaultImg.default_store_img);
|
defaultImg.default_brand_img = this.img(defaultImg.default_brand_img);
|
return defaultImg;
|
} else {
|
return {
|
default_goods_img: '',
|
default_headimg: '',
|
default_shop_img: '',
|
default_category_img: '',
|
default_city_img: '',
|
default_supply_img: '',
|
default_store_img: '',
|
default_brand_img: ''
|
};
|
}
|
},
|
/**
|
* 判断手机是否为iphoneX系列
|
*/
|
uniappIsIPhoneX() {
|
let isIphoneX = false;
|
let systemInfo = uni.getSystemInfoSync();
|
// #ifdef MP
|
if (systemInfo.model.search('iPhone X') != -1 || systemInfo.model.search('iPhone 11') != -1 || systemInfo.model
|
.search(
|
'iPhone12') != -1 || systemInfo.model
|
.search(
|
'iPhone13') != -1 || systemInfo.model
|
.search(
|
'iPhone14') != -1) {
|
isIphoneX = true;
|
}
|
// #endif
|
|
// #ifdef H5
|
var u = navigator.userAgent;
|
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
|
|
if (isIOS) {
|
if (systemInfo.screenWidth == 375 && systemInfo.screenHeight == 812 && systemInfo.pixelRatio == 3) {
|
isIphoneX = true;
|
} else if (systemInfo.screenWidth == 414 && systemInfo.screenHeight == 896 && systemInfo.pixelRatio == 3) {
|
isIphoneX = true;
|
} else if (systemInfo.screenWidth == 414 && systemInfo.screenHeight == 896 && systemInfo.pixelRatio == 2) {
|
isIphoneX = true;
|
}
|
}
|
// #endif
|
return isIphoneX;
|
},
|
/**
|
* 判断手机是否为iphone11系列
|
*/
|
uniappIsIPhone11() {
|
let isIphone11 = false;
|
let systemInfo = uni.getSystemInfoSync();
|
// #ifdef MP
|
if (systemInfo.model.search('iPhone 11') != -1) {
|
isIphone11 = true;
|
}
|
// #endif
|
return isIphone11;
|
},
|
/**
|
* 判断当前页面栈是否存在,如果存在,则返回该页面栈,否则跳转到该页面
|
* @param {Object} url
|
*/
|
jumpPage(url) {
|
let jump = true;
|
let arr = getCurrentPages().reverse();
|
for (let i = 0; i < arr.length; i++) {
|
if (url.indexOf(arr[i].route) != -1) {
|
jump = false;
|
uni.navigateBack({
|
delta: i
|
});
|
break;
|
}
|
}
|
if (jump) {
|
this.$util.diyRedirectTo(url);
|
}
|
},
|
/**
|
* 计算两个经纬度之间的距离
|
* @param {Object} lat1
|
* @param {Object} lng1
|
* @param {Object} lat2
|
* @param {Object} lng2
|
*/
|
getDistance(lat1, lng1, lat2, lng2) {
|
var radLat1 = lat1 * Math.PI / 180.0;
|
var radLat2 = lat2 * Math.PI / 180.0;
|
var a = radLat1 - radLat2;
|
var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
|
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
|
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
|
s = s * 6378.137; // EARTH_RADIUS;
|
s = Math.round(s * 10000) / 10000;
|
return s;
|
},
|
// #ifdef H5
|
/**
|
* 判断该浏览器是否为safaria浏览器
|
*/
|
isSafari() {
|
let res = uni.getSystemInfoSync();
|
var ua = navigator.userAgent.toLowerCase();
|
if (ua.indexOf('applewebkit') > -1 && ua.indexOf('mobile') > -1 && ua.indexOf('safari') > -1 &&
|
ua.indexOf('linux') === -1 && ua.indexOf('android') === -1 && ua.indexOf('chrome') === -1 &&
|
ua.indexOf('ios') === -1 && ua.indexOf('browser') === -1) {
|
return true;
|
} else {
|
return false;
|
}
|
},
|
// #endif
|
goBack(backUrl = '/pages/index/index/index') {
|
if (getCurrentPages().length == 1) {
|
this.redirectTo(backUrl);
|
} else {
|
uni.navigateBack();
|
}
|
},
|
/**
|
* 转换数字,保留f位
|
* @param {Object} e
|
* @param {Object} f
|
*/
|
numberFixed(e, f) {
|
if (!f) {
|
f = 0;
|
}
|
return Number(e).toFixed(f);
|
},
|
/**
|
* 获取url参数
|
* @param {Object} callback
|
*/
|
getUrlCode(callback) {
|
var url = location.search;
|
var theRequest = new Object();
|
if (url.indexOf('?') != -1) {
|
var str = url.substr(1);
|
var strs = str.split('&');
|
for (var i = 0; i < strs.length; i++) {
|
theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
|
}
|
}
|
typeof callback == 'function' && callback(theRequest);
|
},
|
|
/**
|
* 路径转base64
|
* @param {Object} string
|
*/
|
pathToBase64(path) {
|
if (/^data:/.test(path)) return path
|
return new Promise((resolve, reject) => {
|
// #ifdef H5
|
let image = new Image();
|
image.setAttribute("crossOrigin", 'Anonymous');
|
image.onload = function() {
|
let canvas = document.createElement('canvas');
|
canvas.width = this.naturalWidth;
|
canvas.height = this.naturalHeight;
|
canvas.getContext('2d').drawImage(image, 0, 0);
|
let result = canvas.toDataURL('image/png')
|
resolve(result);
|
canvas.height = canvas.width = 0
|
}
|
image.src = path + '?v=' + Math.random()
|
image.onerror = (error) => {
|
reject(error);
|
};
|
// #endif
|
|
// #ifdef MP
|
if (uni.canIUse('getFileSystemManager')) {
|
uni.getFileSystemManager().readFile({
|
filePath: path,
|
encoding: 'base64',
|
success: (res) => {
|
resolve('data:image/png;base64,' + res.data)
|
},
|
fail: (error) => {
|
reject(error)
|
}
|
})
|
}
|
// #endif
|
|
// #ifdef APP-PLUS
|
plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), (entry) => {
|
entry.file((file) => {
|
const fileReader = new plus.io.FileReader()
|
fileReader.onload = (data) => {
|
resolve(data.target.result)
|
}
|
fileReader.onerror = (error) => {
|
reject(error)
|
}
|
fileReader.readAsDataURL(file)
|
}, reject)
|
}, reject)
|
// #endif
|
})
|
},
|
roundToTwo(num) {
|
if (isNaN(num)) {
|
return 0
|
}
|
return Math.round((num + Number.EPSILON) * 100) / 100;
|
},
|
/**
|
* @method 函数防抖
|
* @desc 短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。
|
* @param func 目标函数
|
* @param wait 延迟执行毫秒数
|
* @param immediate true - 立即执行, false - 延迟执行
|
*/
|
debounce(func, wait = 1000, immediate = true) {
|
let timer;
|
return function() {
|
let context = this,
|
args = arguments;
|
if (timer) clearTimeout(timer);
|
if (immediate) {
|
let callNow = !timer;
|
timer = setTimeout(() => {
|
timer = null;
|
}, wait);
|
if (callNow) func.apply(context, args);
|
} else {
|
timer = setTimeout(() => {
|
func.apply(context, args);
|
}, wait)
|
}
|
}
|
},
|
/**
|
* @method 函数节流
|
* @desc 指连续触发事件,但是在 n 秒内只执行一次函数。即 2n 秒内执行 2 次... 。会稀释函数的执行频率。
|
* @param func 函数
|
* @param wait 延迟执行毫秒数
|
* @param type 1 在时间段开始的时候触发 2 在时间段结束的时候触发
|
*/
|
throttle(func, wait = 1000, type = 1) {
|
let previous = 0;
|
let timeout;
|
return function() {
|
let context = this;
|
let args = arguments;
|
if (type === 1) {
|
let now = Date.now();
|
if (now - previous > wait) {
|
func.apply(context, args);
|
previous = now;
|
}
|
} else if (type === 2) {
|
if (!timeout) {
|
timeout = setTimeout(() => {
|
timeout = null;
|
func.apply(context, args)
|
}, wait)
|
}
|
}
|
}
|
},
|
checkFileExtensions(str) {
|
const extensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx'];
|
return extensions.some(extension => str.includes(extension));
|
},
|
previewWechat(urlPdf) {
|
uni.showLoading({
|
title: '正在加载中..'
|
})
|
uni.downloadFile({
|
url: urlPdf,
|
success: function(res) {
|
var filePath = res.tempFilePath;
|
const index = urlPdf.lastIndexOf(".");
|
const suffix = urlPdf.substring(index + 1);
|
uni.openDocument({
|
fileType: suffix,
|
filePath: filePath,
|
showMenu: true,
|
success: function(res) {
|
console.log('打开文档成功');
|
uni.hideLoading()
|
},
|
});
|
},
|
complete: function(r) {
|
uni.hideLoading()
|
}
|
});
|
},
|
//生成时间戳+随机数
|
// 生成时间戳+随机数的函数
|
generateTimestampWithRandom(filename) {
|
// 获取当前日期和时间
|
const now = new Date();
|
// 获取年份,确保为四位数
|
const year = now.getFullYear();
|
// 获取月份,确保为两位数
|
const month = String(now.getMonth() + 1).padStart(2, '0');
|
// 获取日期,确保为两位数
|
const day = String(now.getDate()).padStart(2, '0');
|
// 获取小时,确保为两位数
|
const hours = String(now.getHours()).padStart(2, '0');
|
// 获取分钟,确保为两位数
|
const minutes = String(now.getMinutes()).padStart(2, '0');
|
// 获取秒数,确保为两位数
|
const seconds = String(now.getSeconds()).padStart(2, '0');
|
// 拼接时间戳
|
const timestamp = `${year}${month}${day}${hours}${minutes}${seconds}`;
|
// 生成一个 0 到 9999 之间的随机数,并格式化为四位数
|
const randomNumber = String(Math.floor(Math.random() * 10000)).padStart(4, '0');
|
// 拼接时间戳和随机数
|
return `cylsg/${timestamp}_${randomNumber}` + filename.match(/\.[^.]+$/);
|
},
|
getFileExtensionWithDotRegex(filename) {
|
const match = filename.match(/\.[^.]+$/);
|
return match ? match[0] : '';
|
},
|
isEmpty(value) {
|
return (
|
value === null ||
|
value === undefined ||
|
value === '' ||
|
(Array.isArray(value) && value.length === 0) ||
|
(typeof value === 'object' &&!Array.isArray(value) && Object.keys(value).length === 0)
|
);
|
},
|
|
removeEmptyValuesRecursive(obj) {
|
const newObj = {};
|
for (const key in obj) {
|
if (obj.hasOwnProperty(key)) {
|
const value = obj[key];
|
if (!this.isEmpty(value)) {
|
if (typeof value === 'object' &&!Array.isArray(value)) {
|
newObj[key] = removeEmptyValuesRecursive(value);
|
} else {
|
newObj[key] = value;
|
}
|
}
|
}
|
}
|
return newObj;
|
}
|
}
|