1009 lines
32 KiB
JavaScript
1009 lines
32 KiB
JavaScript
import { renewLocation } from './public-api.js';
|
||
import permision from "@/js_sdk/wa-permission/permission.js"
|
||
// 解决微信小程序
|
||
var QQMapWX = require('./map/qqmap-wx-jssdk.min.js');
|
||
var qqmapsdk = new QQMapWX({
|
||
key: 'QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA'
|
||
});
|
||
// 解决H5跨域
|
||
const jsonp = function(url, data) {
|
||
return new Promise((resolve, reject) => {
|
||
// 1.初始化url
|
||
let dataString = url.indexOf('?') === -1 ? '?' : '&'
|
||
let callbackName = `jsonpCB_${ Date.now() }`;
|
||
url += `${ dataString }callback=${ callbackName }`
|
||
if(data) {
|
||
// 2.有请求参数,依次添加到url
|
||
for(let k in data) {
|
||
url += `&${ k }=${ data[k] }`
|
||
}
|
||
}
|
||
let scriptNode = document.createElement('script');
|
||
scriptNode.src = url;
|
||
// 3. callback
|
||
window[callbackName] = (result) => {
|
||
result ? resolve(result) : reject('没有返回数据');
|
||
delete window[callbackName];
|
||
document.body.removeChild(scriptNode);
|
||
}
|
||
// 4. 异常情况
|
||
scriptNode.addEventListener('error', () => {
|
||
reject('接口返回数据失败');
|
||
delete window[callbackName];
|
||
document.body.removeChild(scriptNode);
|
||
}, false)
|
||
// 5. 开始请求
|
||
document.body.appendChild(scriptNode)
|
||
})
|
||
}
|
||
|
||
const tools = {
|
||
// 检测是否授权了
|
||
checkQx(num){
|
||
// #ifdef APP-PLUS
|
||
let system = uni.getSystemInfoSync(); // 获取系统信息
|
||
let current = '-1';
|
||
let errArr = ['相机','读取相册']
|
||
if (system.platform === 'android') { // 判断平台
|
||
if(num==2) {
|
||
if(!permision.requestAndroidPermission('android.permission.CAMERA')) {
|
||
// 如果相机没有授权
|
||
current = 0;
|
||
}
|
||
}
|
||
if(num==8) {
|
||
if(!permision.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')) {
|
||
// 如果外部存储(含相册)读取权限没有授权
|
||
current = 1;
|
||
}
|
||
}
|
||
} else if (system.platform === 'ios') {
|
||
if(num==2) {
|
||
if(!permision.judgeIosPermission('camera')) {
|
||
// 如果相机没有授权
|
||
current = 0;
|
||
}
|
||
}
|
||
if(num==8) {
|
||
if(!permision.judgeIosPermission('photoLibrary')) {
|
||
// 如果外部存储(含相册)读取权限没有授权
|
||
current = 1;
|
||
}
|
||
}
|
||
}
|
||
if(current!='-1') {
|
||
uni.showModal({
|
||
content: `${errArr[current]}权限未获得授权`,
|
||
confirmText:'去设置',
|
||
cancelText:'取消',
|
||
success: (qx) => {
|
||
if(qx.confirm) {
|
||
permision.gotoAppPermissionSetting()
|
||
}
|
||
}
|
||
});
|
||
}
|
||
// #endif
|
||
// #ifdef MP-WEIXIN
|
||
wx.getSetting({
|
||
success(res) {
|
||
if (!res.authSetting['scope.camera']) { //获取摄像头权限
|
||
wx.authorize({
|
||
scope:'scope.camera',
|
||
success() {
|
||
console.log('授权成功')
|
||
}, fail() {
|
||
wx.showModal({
|
||
title: '提示',
|
||
content: '尚未进行授权,部分功能将无法使用',
|
||
showCancel: false,
|
||
success(res) {
|
||
if (res.confirm) {
|
||
console.log('用户点击确定')
|
||
wx.openSetting({ //这里的方法是调到一个添加权限的页面,可以自己尝试
|
||
success: (res) => {
|
||
if (!res.authSetting['scope.camera']) {
|
||
wx.authorize({
|
||
scope: 'scope.camera',
|
||
success() {
|
||
console.log('授权成功')
|
||
}, fail() {
|
||
console.log('用户点击取消')
|
||
}
|
||
})
|
||
}
|
||
},
|
||
fail: function () {
|
||
console.log("授权设置录音失败");
|
||
}
|
||
})
|
||
} else if (res.cancel) {
|
||
console.log('用户点击取消')
|
||
}
|
||
}
|
||
})
|
||
}
|
||
})
|
||
}
|
||
if (!res.authSetting['scope.writePhotosAlbum']) { //获取摄像头权限
|
||
wx.authorize({
|
||
scope:'scope.writePhotosAlbum',
|
||
success() {
|
||
console.log('授权成功')
|
||
}, fail() {
|
||
wx.showModal({
|
||
title: '提示',
|
||
content: '尚未进行授权,部分功能将无法使用',
|
||
showCancel: false,
|
||
success(res) {
|
||
if (res.confirm) {
|
||
console.log('用户点击确定')
|
||
wx.openSetting({ //这里的方法是调到一个添加权限的页面,可以自己尝试
|
||
success: (res) => {
|
||
if (!res.authSetting['scope.writePhotosAlbum']) {
|
||
wx.authorize({
|
||
scope: 'scope.writePhotosAlbum',
|
||
success() {
|
||
console.log('授权成功')
|
||
}, fail() {
|
||
console.log('用户点击取消')
|
||
}
|
||
})
|
||
}
|
||
},
|
||
fail: function () {
|
||
console.log("授权设置录音失败");
|
||
}
|
||
})
|
||
} else if (res.cancel) {
|
||
console.log('用户点击取消')
|
||
}
|
||
}
|
||
})
|
||
}
|
||
})
|
||
}
|
||
}
|
||
})
|
||
// #endif
|
||
},
|
||
checkOpenGPSServiceByAndroidIOS() {
|
||
// #ifdef APP-PLUS
|
||
let system = uni.getSystemInfoSync(); // 获取系统信息
|
||
if (system.platform === 'android') { // 判断平台
|
||
var context = plus.android.importClass("android.content.Context");
|
||
var locationManager = plus.android.importClass("android.location.LocationManager");
|
||
var main = plus.android.runtimeMainActivity();
|
||
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
|
||
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '请打开定位服务功能',
|
||
showCancel: false, // 不显示取消按钮
|
||
success() {
|
||
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
|
||
var Intent = plus.android.importClass('android.content.Intent');
|
||
var Settings = plus.android.importClass('android.provider.Settings');
|
||
var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||
main.startActivity(intent); // 打开系统设置GPS服务页面
|
||
} else {
|
||
console.log('GPS功能已开启');
|
||
}
|
||
}
|
||
});
|
||
}
|
||
} else if (system.platform === 'ios') {
|
||
console.log("苹果");
|
||
var cllocationManger = plus.ios.import("CLLocationManager");
|
||
var enable = cllocationManger.locationServicesEnabled();
|
||
var status = cllocationManger.authorizationStatus();
|
||
plus.ios.deleteObject(cllocationManger);
|
||
if (enable && status != 2) {
|
||
console.log("手机系统的定位已经打开");
|
||
} else {
|
||
console.log("手机系统的定位没有打开");
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '请前往设置-隐私-定位服务打开定位服务功能',
|
||
showCancel: false, // 不显示取消按钮
|
||
success() {
|
||
var UIApplication = plus.ios.import("UIApplication");
|
||
var application2 = UIApplication.sharedApplication();
|
||
var NSURL2 = plus.ios.import("NSURL");
|
||
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
|
||
// var setting2 = NSURL2.URLWithString("App-Prefs:root=LOCATION_SERVICES");
|
||
var setting2 = NSURL2.URLWithString("app-settings:");
|
||
//var setting2 = NSURL2.URLWithString("App-Prefs:root=Privacy&path=LOCATION");
|
||
// var setting2 = NSURL2.URLWithString("App-Prefs:root=Privacy&path=LOCATION_SERVICES");
|
||
application2.openURL(setting2);
|
||
plus.ios.deleteObject(setting2);
|
||
plus.ios.deleteObject(NSURL2);
|
||
plus.ios.deleteObject(application2);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
// #endif
|
||
// #ifdef MP-WEIXIN
|
||
wx.getSetting({
|
||
success: (res) => {
|
||
if (!res.authSetting['scope.userLocation']) {
|
||
//打开提示框,提示前往设置页面
|
||
uni.showModal({
|
||
title:'为了更好的体验,请开启定位服务',
|
||
confirmText:'开启',
|
||
cancelText:'关闭',
|
||
success:(res)=> {
|
||
if(res.confirm) {
|
||
wx.openSetting({success (res) {}})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|
||
})
|
||
// #endif
|
||
},
|
||
// 更新用户地理位置
|
||
locationTimer:null,
|
||
// 每十分钟调用一次
|
||
renewLocationEv(){
|
||
this.platformEv();
|
||
clearInterval(this.locationTimer);
|
||
this.locationTimer = setInterval(()=>{
|
||
this.platformEv();
|
||
},600000)
|
||
},
|
||
// 平台判断
|
||
platformEv(){
|
||
// #ifdef APP-PLUS
|
||
this.getAddress();
|
||
// #endif
|
||
// #ifdef MP-WEIXIN
|
||
this.getAddressWx();
|
||
// #endif
|
||
// #ifdef H5
|
||
this.getAddressH5();
|
||
// #endif
|
||
},
|
||
// app获取经纬度和详细地址
|
||
getAddress(){
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
geocode:true,
|
||
success: (res)=> {
|
||
// console.log(res,'地址信息');
|
||
let params = {
|
||
latitude:res.latitude,
|
||
longitude:res.longitude,
|
||
address:`${res.address.province}${res.address.city}${res.address.district || ''}${res.address.street || ''}${res.address.streetNum || ''}${res.address.poiName || ''}`
|
||
}
|
||
console.log(params,'APP');
|
||
this.renewAddressApi(params);
|
||
}
|
||
});
|
||
},
|
||
// 微信获取经纬度和详细地址
|
||
getAddressWx(){
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
geocode:true,
|
||
success: (res)=> {
|
||
// console.log(res,'地址信息');
|
||
qqmapsdk.reverseGeocoder({
|
||
location: {latitude: res.latitude, longitude: res.longitude},
|
||
success:(res)=> {
|
||
// console.log(res,'WX');
|
||
let params = {
|
||
latitude:res.result.location.lat,
|
||
longitude:res.result.location.lng,
|
||
address:`${res.result.address}`
|
||
}
|
||
console.log(params,'WX');
|
||
this.renewAddressApi(params);
|
||
},
|
||
fail(err) {
|
||
console.log(err)
|
||
}
|
||
})
|
||
}
|
||
});
|
||
},
|
||
// h5
|
||
getAddressH5(){
|
||
// uni.showLoading({
|
||
// title: '定位中...',
|
||
// mask:true
|
||
// });
|
||
uni.getLocation({
|
||
type: 'gcj02', // wgs84 gcj02
|
||
altitude: true,
|
||
// geocode: true, // wgs84
|
||
success: (res)=> {
|
||
let str = `output=jsonp&key=QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA&location=${res.latitude},${res.longitude}`
|
||
jsonp('https://apis.map.qq.com/ws/geocoder/v1/?'+str,{}).then(res=>{
|
||
// console.log(res,'H5');
|
||
// uni.hideLoading();
|
||
if(res.status == 0){
|
||
// that.locationName = res.result.address; //当前定位
|
||
let params = {
|
||
latitude:res.result.location.lat,
|
||
longitude:res.result.location.lng,
|
||
address:`${res.result.address}`
|
||
}
|
||
console.log(params,'H5');
|
||
this.renewAddressApi(params);
|
||
}
|
||
})
|
||
}
|
||
});
|
||
},
|
||
// 更新地址事件
|
||
renewAddressApi(params){
|
||
console.log(params,'最终提交参数');
|
||
// renewLocation(params).then(res=>{})
|
||
},
|
||
// 刷新token
|
||
refreshToken(){
|
||
console.log('进入检测token是否过期');
|
||
var date = new Date();
|
||
var timestamp = date.getTime();//精确到毫秒
|
||
// 如果过期时间 减 10分钟 小于当前时间,刷新token
|
||
if((uni.getStorageSync('expire')*1000 - 600000) < timestamp) {
|
||
uni.login({
|
||
provider: 'weixin',
|
||
success: (res)=> {
|
||
if (res.code) {
|
||
var params = {code:res.code}
|
||
uni.request({
|
||
url: `${getApp().globalData.hostapi}/api/user/login`,
|
||
method: 'post',
|
||
data: params,
|
||
header: {
|
||
'Content-Type': 'application/json; charset=UTF-8',
|
||
'Authorization': 'Bearer '+uni.getStorageSync('token') || ''
|
||
},
|
||
success: res => {
|
||
if(res.data.data.token!=''){
|
||
uni.setStorageSync('token',res.data.data.token)//缓存token
|
||
uni.setStorageSync('openid',res.data.data.openid)//缓存Openid
|
||
uni.setStorageSync('expire',res.data.data.expire)//缓存失效时间(时间戳格式)
|
||
uni.setStorageSync('is_active',res.data.data.is_active)//是否第一次授权
|
||
uni.setStorageSync('phone_active',res.data.data.phone_active)//是否绑定手机号
|
||
uni.setStorageSync('userId',res.data.data.account_id)//用户id
|
||
uni.setStorageSync('invite_code',res.data.data.invite_code)//邀请码
|
||
}
|
||
}
|
||
})
|
||
}
|
||
},
|
||
});
|
||
}
|
||
},
|
||
// 判断是否授权,没授权,前往登录页面授权
|
||
authTimer:null,
|
||
judgeAuth(){
|
||
let auth = false;
|
||
clearTimeout(this.authTimer);
|
||
if(!uni.getStorageSync('token')) {
|
||
this.showToast('请登录');
|
||
this.authTimer = setTimeout(()=>{
|
||
uni.navigateTo({url:'/pages/login/login'});
|
||
},2000)
|
||
} else {
|
||
auth = true;
|
||
}
|
||
return auth;
|
||
},
|
||
// 判断当前环境、清空日志、设置全局域名
|
||
currentContext(){
|
||
// #ifdef APP-PLUS
|
||
if(uni.getSystemInfoSync().platform != "devtools"){//devtools:开发版 值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+)
|
||
// console.log = () =>{}
|
||
}
|
||
// #endif
|
||
// 微信小程序原生API性能优化
|
||
// #ifdef MP-WEIXIN
|
||
let hInfo = wx.getAccountInfoSync();
|
||
// console.log(hInfo.envVersion);//develop:开发版 trial:体验版 release:正式版
|
||
// if(hInfo.miniProgram.envVersion == "develop"){
|
||
if(hInfo.miniProgram.envVersion == "develop" || hInfo.miniProgram.envVersion == "trial"){
|
||
|
||
} else {
|
||
// 清除所有输出日志
|
||
console.log = () =>{};
|
||
// 开启埋点倒计时
|
||
this.daoTime();//开启埋点倒计时
|
||
}
|
||
// #endif
|
||
},
|
||
timer:'',
|
||
timerNot:'',
|
||
// 埋点倒计时
|
||
daoTime(){
|
||
let daoTime = uni.getStorageSync('daoTime')
|
||
if(daoTime==''){//初次判断倒计时是否为空
|
||
uni.setStorageSync('daoTime',60)//设置倒计时
|
||
daoTime = uni.getStorageSync('daoTime')
|
||
this.timer = setInterval(()=>{
|
||
uni.setStorageSync('daoTime',daoTime--)//设置倒计时
|
||
// console.log('埋点倒计时初次:',daoTime);
|
||
// console.log('埋点长度初次:',uni.getStorageSync('maiList').length);
|
||
if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){
|
||
uni.removeStorageSync('daoTime')//清空倒计时
|
||
clearInterval(this.timer)//关闭倒计时
|
||
// console.log('上/报,埋点');
|
||
// reportBuriedPoint(uni.getStorageSync('maiList'))//上报事件
|
||
uni.removeStorageSync('maiList')//清空上报参数
|
||
this.daoTime()//重新倒计时
|
||
}
|
||
},1000)
|
||
} else {//继续当前倒计时倒计
|
||
this.timer = setInterval(()=>{
|
||
uni.setStorageSync('daoTime',daoTime--)//设置倒计时
|
||
// console.log('埋点倒计时:',daoTime);
|
||
// console.log('埋点长度:',uni.getStorageSync('maiList').length);
|
||
if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){
|
||
uni.removeStorageSync('daoTime')//清空倒计时
|
||
clearInterval(this.timer)//关闭倒计时
|
||
// console.log('上报,埋点');
|
||
// reportBuriedPoint(uni.getStorageSync('maiList'))//上报事件
|
||
uni.removeStorageSync('maiList')//清空上报参数
|
||
this.daoTime()//重新倒计时
|
||
}
|
||
},1000)
|
||
}
|
||
},
|
||
closeTimer(){
|
||
clearInterval(this.timer)//关闭倒计时
|
||
console.log('倒计时清空了');
|
||
clearInterval(this.timerNot)//关闭倒计时
|
||
},
|
||
maiDian(data){//埋点事件
|
||
let maiList = uni.getStorageSync('maiList')
|
||
// console.log(maiList);
|
||
if(maiList==''){
|
||
maiList = [data]
|
||
} else maiList.push(data)
|
||
uni.setStorageSync('maiList',maiList)
|
||
},
|
||
weekDate(){//获取未来七天星期几,几号
|
||
let date = new Date()
|
||
let year = date.getFullYear()
|
||
let month = date.getMonth()+1
|
||
let day = date.getDate()
|
||
let nth = date.getDay()//星期几
|
||
// console.log(year,month,day);
|
||
let xingq = ['周一','周二','周三','周四','周五','周六','周日']
|
||
|
||
},
|
||
// 手机号验证
|
||
isPhone:function(phone){
|
||
// 手机号正则表达式
|
||
let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
|
||
// if(!reg_tel.test(phone)){
|
||
// return true
|
||
// }
|
||
// return false
|
||
return !reg_tel.test(phone);
|
||
},
|
||
// 电子邮箱验证
|
||
isEmail(email){
|
||
let reg_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
|
||
return !reg_email.test(email);
|
||
},
|
||
// 身份证验证
|
||
isIdentity(identity) {
|
||
let reg_identity = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
|
||
return !reg_identity.test(identity);
|
||
},
|
||
// 手机号中间四位用"****"带替
|
||
hideMPhone(phone){
|
||
return `${phone.substr(0, 3)}****${phone.substr(7)}`
|
||
},
|
||
// 手机号中间加字符
|
||
phoneAddChat(phone,startNum=3,endNum=7,character=' '){
|
||
let phoneStr = phone;
|
||
phoneStr = phoneStr.replace(/\s*/g, "");
|
||
var phoneArr = [];
|
||
for(var i = 0; i < phoneStr.length; i++){
|
||
if (i==startNum||i==endNum){
|
||
phoneArr.push(`${character}` + phoneStr.charAt(i));
|
||
} else {
|
||
phoneArr.push(phoneStr.charAt(i));
|
||
}
|
||
}
|
||
phone = phoneArr.join("");
|
||
return phone;
|
||
},
|
||
// 昵称从第一个字开始,后面的都用"*"代替
|
||
hideName(name,num){
|
||
return `${name.substr(0, 1)}****${name.substr(name.length-1)}`
|
||
},
|
||
// 金额转换各三位数使用英文","隔开
|
||
changeNum(num){
|
||
if (num) {
|
||
// 针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了
|
||
/*
|
||
也可以这样想象,现在有一串数字字符串在你面前,如果让你给他家千分位的逗号的话,你是怎么来思考和操作的?
|
||
字符串长度为0/1/2/3时都不用添加
|
||
字符串长度大于3的时候,从右往左数,有三位字符就加一个逗号,然后继续往前数,直到不到往前数少于三位字符为止
|
||
*/
|
||
num = num+''; // 数字转换为字符串,数字是没有.length属性的
|
||
for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
|
||
num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3))
|
||
}
|
||
// 将数据(符号、整数部分、小数部分)整体组合返回
|
||
return num;
|
||
}
|
||
},
|
||
// 整数添加.00,小数就不添加
|
||
addXiaoShu(num){
|
||
console.log(num,'添加小数的方法start');
|
||
let str = '0.00'
|
||
if(num) {
|
||
str = str = num.toString();
|
||
str = str*1;
|
||
str = str.toFixed(2);
|
||
str = str+'';
|
||
}
|
||
return str.includes('.') ? str : str = num + '.00';
|
||
},
|
||
// type:+加、-减、*乘、/除
|
||
// len:小数后保留几位
|
||
operationEv(num1,num2,type,len=0){
|
||
// 将数字转化成字符串
|
||
num1 = num1.toString();
|
||
num2 = num2.toString();
|
||
// 获取小数点的位置
|
||
var index1 = num1.indexOf(".");
|
||
var index2 = num2.indexOf(".");
|
||
// 如果小数点存在,那么就再获取各自的小数位数
|
||
var ws1 = 0;
|
||
var ws2 = 0;
|
||
if(index1 != -1){
|
||
ws1 = num1.split(".")[1].length;
|
||
}
|
||
if(index2 != -1){
|
||
ws2 = num2.split(".")[1].length;
|
||
}
|
||
// 看谁的小数位数大,谁的小数位数小
|
||
var bigger = (ws1 > ws2) ? ws1 : ws2;
|
||
var smaller = (ws1 < ws2) ? ws1 : ws2;
|
||
// 计算得到需要补齐的0的个数
|
||
var zerosCount = bigger - smaller;
|
||
// 好了,现在不管三七二十,全部去除小数点
|
||
num1 = num1.replace(".","");
|
||
num2 = num2.replace(".","");
|
||
// 比较num1和num2谁大,比较方法就是看谁是smaller,是smaller的一方就补0
|
||
if(ws1 == smaller){
|
||
for (var i = 0; i < zerosCount; i++) {
|
||
num1 += "0";
|
||
}
|
||
} else {
|
||
for (var i = 0; i < zerosCount; i++) {
|
||
num2 += "0";
|
||
}
|
||
}
|
||
// 开始计算
|
||
var sum = "";
|
||
if(type=="+"){
|
||
// 加
|
||
sum = parseInt(num1) + parseInt(num2);
|
||
}
|
||
if(type=="-"){
|
||
// 减
|
||
sum = parseInt(num1) - parseInt(num2);
|
||
}
|
||
if(type=="*"){
|
||
// 乘
|
||
sum = parseInt(num1) * parseInt(num2);
|
||
}
|
||
if(type=="/"){
|
||
// 除
|
||
sum = parseInt(num1) / parseInt(num2);
|
||
}
|
||
// 根据较大的小数位数计算倍数
|
||
var beishu = 1;
|
||
for (var i = 0; i < bigger; i++) {
|
||
beishu = beishu*10;
|
||
}
|
||
sum = sum/beishu;
|
||
if(type=="*"){
|
||
switch (bigger){
|
||
case 1:
|
||
sum = sum / 10;
|
||
break;
|
||
case 2:
|
||
sum = sum / 100;
|
||
break;
|
||
case 3:
|
||
sum = sum / 1000;
|
||
break;
|
||
}
|
||
}
|
||
if(type=="/"){
|
||
switch (bigger){
|
||
case 1:
|
||
sum = sum * 10;
|
||
break;
|
||
case 2:
|
||
sum = sum * 100;
|
||
break;
|
||
case 3:
|
||
sum = sum * 1000;
|
||
break;
|
||
}
|
||
}
|
||
len!=0 ? sum = sum.toFixed(len) : '';
|
||
return sum;
|
||
},
|
||
// 时间戳===>日期
|
||
timestampToTime(timestamp) {
|
||
var date = timestamp.toString().length==13 ? new Date(timestamp*1) : new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
|
||
var Y = date.getFullYear();
|
||
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1);
|
||
var D = date.getDate() < 10 ? '0'+date.getDate() : date.getDate();
|
||
var h = date.getHours() < 10 ? '0'+date.getHours() : date.getHours();
|
||
var m = date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes();
|
||
var s = date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds();
|
||
return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' +s;
|
||
},
|
||
// 日期===>时间戳
|
||
timeToTimestamp(time){
|
||
var date = new Date(time.replace(/-/g,'/'));
|
||
var timestamp = date.getTime();//精确到毫秒
|
||
return timestamp
|
||
// var date = new Date('2014-04-23 18:55:49:123');
|
||
// 有三种方式获取
|
||
// var time1 = date.getTime();//精确到毫秒
|
||
// var time2 = date.valueOf();//精确到毫秒
|
||
// var time3 = Date.parse(date);//只能精确到秒,毫秒用000替代
|
||
// console.log(time1);//1398250549123
|
||
// console.log(time2);//1398250549123
|
||
// console.log(time3);//1398250549000
|
||
},
|
||
// 返回当前时间
|
||
returnCurrentTime(format,type) {
|
||
let date = new Date();
|
||
let year = date.getFullYear(); // 年
|
||
let month = date.getMonth() + 1; // 月
|
||
let day = date.getDate(); // 日
|
||
let time = date.getHours(); // 时
|
||
let minu = date.getSeconds(); // 分
|
||
let second = date.getMinutes(); // 秒
|
||
|
||
let newTime = '';
|
||
switch (type){
|
||
case 0:
|
||
newTime = `${year}${format}${month < 10? '0' + month : month}${format}${day < 10 ? '0' + day : day} ${time < 10 ? '0' + time : time}:${minu < 10 ? '0' + minu : minu}`; // 2022-03-31 16:05
|
||
break;
|
||
case 1:
|
||
newTime = `${year}${format}${month < 10? '0' + month : month}${format}${day < 10 ? '0' + day : day} ${time < 10 ? '0' + time : time}:${minu < 10 ? '0' + minu : minu}:${second < 10 ? '0' + second : second}`; // 2022-03-31 16:10:07
|
||
break;
|
||
}
|
||
return newTime;
|
||
},
|
||
// 返回时间xx天xx小时xx分钟
|
||
returnTimeFormat(startTime,endTime){
|
||
console.log(startTime,endTime);
|
||
let newTimeFormat = '';
|
||
let currentTimestamp = this.timeToTimestamp(endTime) - this.timeToTimestamp(startTime);
|
||
return this.returnTimestampToTime(currentTimestamp);
|
||
},
|
||
// 返回时间戳转时、分对象
|
||
returnTimestampToTime(timestamp){
|
||
let timeStr = '';
|
||
var day = parseInt((timestamp % (1000 * 60 * 60 * 24 * 12)) / (1000 * 60 * 60 * 24));
|
||
var hours = parseInt((timestamp % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||
var seconds = parseInt((timestamp % (1000 * 60 * 60)) / (1000 * 60));
|
||
day = day < 10 ? ('0' + day) : day;
|
||
hours = hours < 10 ? ('0' + hours) : hours;
|
||
seconds = seconds < 10 ? ('0' + seconds) : seconds;
|
||
if(day*1==0) {
|
||
if(hours*1==0) {
|
||
seconds*1==0 ? timeStr = 0 : timeStr = `${seconds}分钟`;
|
||
} else {
|
||
timeStr = `${hours}小时${seconds}分钟`;
|
||
}
|
||
} else {
|
||
timeStr = `${day}天${hours}小时${seconds}分钟`;
|
||
}
|
||
return timeStr;
|
||
},
|
||
// 时间戳转时分秒 00 : 00 : 00
|
||
formatDuring: function(mss) {
|
||
// let dangTime = Math.round(new Date()/1000)//获取当前时间戳
|
||
var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||
var seconds = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
|
||
var minutes = (mss % (1000 * 60)) / 1000;
|
||
hours = hours < 10 ? ('0' + hours) : hours;
|
||
seconds = seconds < 10 ? ('0' + seconds) : seconds;
|
||
minutes = minutes < 10 ? ('0' + minutes) : minutes;
|
||
return hours + ' : ' + seconds + ' : ' + minutes;
|
||
},
|
||
// 随机数生成
|
||
randomStr(){
|
||
var strData = "";
|
||
//如果觉得12个数太少也可以多放点,将i<4修改即可
|
||
for(var i=0;i<4;i++){
|
||
var num = random(0,9); //数字
|
||
var upper = String.fromCharCode(random(65,90)); //大写字母
|
||
var lower = String.fromCharCode(random(97,122)); //小写字母
|
||
strData = strData+num+upper+lower; //将所有结果放进strData中
|
||
|
||
}
|
||
var str = "";
|
||
for (var i = 0; i < 4; i++) {
|
||
str += strData[random(0,strData.length-1)]; //在strData里面随机抽取四个数
|
||
}
|
||
return str;
|
||
},
|
||
// 金额输入框验证
|
||
checkPrice(number,zong){
|
||
let reg = /^[0-9]*$/;//数字正则表达式
|
||
let newObj = {}
|
||
zong = parseInt(zong).toString()//取小数点左边的整数
|
||
if(!reg.test(number)){//不是数字时
|
||
newObj = {
|
||
len:zong.length,//动态设置长度
|
||
val:zong//动态设置值正整数的总金额
|
||
}
|
||
} else {//是数字时
|
||
newObj = {
|
||
len:zong.length,
|
||
val:number//动态设置当前输入的值
|
||
}
|
||
if(number*1 > zong*1){//输入的金额大于总金额
|
||
newObj.val = zong//赋值总金额
|
||
}
|
||
}
|
||
return newObj
|
||
},
|
||
// 提示方法
|
||
showToast: function(msg, icon,time) {
|
||
// 弹框图标:none默认无图标、loading、success
|
||
var newIncon = 'none';
|
||
if (icon) {newIncon = icon;}
|
||
// 弹框显示时间:默认2秒
|
||
var newTime = 2000
|
||
if (time) {newTime = time;}
|
||
return uni.showToast({
|
||
title: msg,
|
||
icon: newIncon,
|
||
duration:newTime
|
||
})
|
||
},
|
||
// 富文本
|
||
escape2Html(str) {
|
||
var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' };
|
||
return str.replace(/&(lt|gt|nbsp|amp|quot|src);/ig, function (all, t) {
|
||
return arrEntities[t];
|
||
})
|
||
.replace('<section', '<div')
|
||
.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, (match, p1) => {
|
||
return `<img mode="widthFix" style="max-width:100%!important;height:auto" src='${p1.indexOf('http') > -1 ? p1 : 'https://7and5.cn' + p1}' />`
|
||
})
|
||
},
|
||
// 检查网络状态
|
||
networkStatus(){
|
||
uni.getNetworkType({
|
||
success: (res)=> {
|
||
console.log('当前网络状态:',res.networkType);//none:当前无网络连接
|
||
if(res.networkType=='none'){
|
||
uni.setStorageSync('isNet',false)
|
||
} else {
|
||
uni.setStorageSync('isNet',true);
|
||
// 微信小程序原生API性能优化
|
||
// #ifdef MP-WEIXIN
|
||
// 连网下,检测小程序是否有更新
|
||
this.checkUpdate();
|
||
// #endif
|
||
}
|
||
}
|
||
});
|
||
},
|
||
// app、小程序的检测版本并更新
|
||
checkUpdate(){
|
||
// 检测app
|
||
// #ifdef APP-PLUS
|
||
|
||
// #endif
|
||
//检测小程序
|
||
// #ifdef MP-WEIXIN
|
||
var self = this;
|
||
// 获取小程序更新机制兼容
|
||
if (wx.canIUse('getUpdateManager')) {
|
||
const updateManager = wx.getUpdateManager();//1. 检查小程序是否有新版本发布
|
||
updateManager.onCheckForUpdate(function(res) {// 请求完新版本信息的回调
|
||
if (res.hasUpdate) {
|
||
//检测到新版本,需要更新,给出提示
|
||
wx.showModal({
|
||
title: '更新提示',
|
||
content: '检测到新版本,是否下载新版本并重启小程序?',
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
//2. 用户确定下载更新小程序,小程序下载及更新静默进行
|
||
self.downLoadAndUpdate(updateManager)
|
||
// 清除所有缓存
|
||
uni.clearStorage();
|
||
uni.clearStorageSync();
|
||
} else if (res.cancel) {
|
||
//用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
|
||
wx.showModal({
|
||
title: '温馨提示~',
|
||
content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
|
||
showCancel:false,//隐藏取消按钮
|
||
confirmText:"确定更新",//只保留确定更新按钮
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
//下载新版本,并重新应用
|
||
self.downLoadAndUpdate(updateManager)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
})
|
||
} else { // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
|
||
wx.showModal({
|
||
title: '提示',
|
||
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
|
||
})
|
||
}
|
||
// #endif
|
||
},
|
||
/**
|
||
* 下载小程序新版本并重启应用
|
||
* */
|
||
downLoadAndUpdate(updateManager){
|
||
var self = this;
|
||
wx.showLoading(); //静默下载更新小程序新版本
|
||
updateManager.onUpdateReady(function () {
|
||
wx.hideLoading(); //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||
updateManager.applyUpdate();
|
||
// 清除缓存
|
||
uni.clearStorageSync();
|
||
uni.clearStorage();
|
||
})
|
||
updateManager.onUpdateFailed(function () { // 新的版本下载失败
|
||
wx.showModal({
|
||
title: '已经有新版本了哟~',
|
||
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
|
||
})
|
||
})
|
||
},
|
||
// 文本复制
|
||
clickCopy(data){
|
||
uni.setClipboardData({
|
||
data: data,
|
||
success: ()=> {
|
||
uni.showToast({title: '复制成功',duration: 2000,icon: 'none'});
|
||
}
|
||
});
|
||
},
|
||
dayTime(endTime,startTime=''){//开启倒计时
|
||
let totalSecond = '';
|
||
// 本地倒计时
|
||
// if(startTime=='') totalSecond = Math.floor((new Date(endTime).getTime() - new Date().getTime())/1000);
|
||
// 解决苹果手机问题
|
||
let date = endTime;
|
||
date = endTime.replace(/-/g,'/')
|
||
// 服务器倒计时
|
||
if(startTime!='') totalSecond = Math.floor((new Date(date).getTime() - startTime)/1000);
|
||
// 总秒数
|
||
let second = totalSecond;
|
||
// 天数
|
||
let day = Math.floor(second / 3600 / 24);
|
||
let dayStr = day.toString();
|
||
if(dayStr.length == 1) dayStr = '0' + dayStr;
|
||
// 小时
|
||
let hr = Math.floor((second - day * 3600 * 24) / 3600);
|
||
let hrStr = hr.toString();
|
||
if(hrStr.length == 1) hrStr = '0' + hrStr;
|
||
// 分钟
|
||
let min = Math.floor((second - day * 3600 * 24 - hr * 3600) / 60);
|
||
let minStr = min.toString();
|
||
if(minStr.length == 1) minStr = '0' + minStr;
|
||
// 秒
|
||
let sec = second - day * 3600 * 24 - hr * 3600 - min * 60;
|
||
let secStr = sec.toString();
|
||
if(secStr.length == 1) secStr = '0' + secStr;
|
||
|
||
let newTime = '';
|
||
if(dayStr==0) {
|
||
newTime = hrStr +'时'+ minStr +'分'+ secStr +'秒';
|
||
} else {
|
||
newTime = dayStr +'天'+ hrStr +'时'+ minStr +'分'+ secStr +'秒';
|
||
}
|
||
return newTime;
|
||
},
|
||
// 禁止小程序使用分享
|
||
disableShareEv(){
|
||
// #ifdef MP-WEIXIN
|
||
wx.hideShareMenu({
|
||
menus: ['shareAppMessage', 'shareTimeline']
|
||
})
|
||
// #endif
|
||
},
|
||
// 获取当前页面url,不带参数
|
||
obtainUrl(){
|
||
let pages = getCurrentPages();
|
||
let route = pages[pages.length - 1].route;
|
||
uni.setStorageSync('url',`/${route}?invite_code=${uni.getStorageSync('invite_code')}`);
|
||
console.log(`${route}`,'tools.js:当前页面路径不带参数')
|
||
},
|
||
// 获取当前页面url,带参数
|
||
obtainUrlParam(){
|
||
let pages = getCurrentPages();
|
||
let routeParam = pages[pages.length - 1].$page.fullPath;
|
||
uni.setStorageSync('urlParam',`${routeParam}?invite_code=${uni.getStorageSync('invite_code')}`);
|
||
console.log(uni.getStorageSync('urlParam'),'tools.js:当前页面路径带参数')
|
||
},
|
||
// 去这里
|
||
goFlag:true,
|
||
goThere(){
|
||
if(this.flag){
|
||
this.flag = false;
|
||
// #ifdef MP-WEIXIN
|
||
wx.getLocation({//获取当前经纬度
|
||
type: 'wgs84', //返回可以用于wx.openLocation的经纬度,官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息
|
||
success: (res)=> {
|
||
wx.openLocation({//使用微信内置地图查看位置。
|
||
latitude: 30.656693,//要去的纬度-地址
|
||
longitude: 104.136425,//要去的经度-地址
|
||
name: '大向天诚有限责任公司',
|
||
address: '四川省成都市成华区双店路B口',
|
||
fail:err=>{
|
||
this.showToast('地址信息错误');
|
||
}
|
||
})
|
||
}
|
||
})
|
||
// #endif
|
||
setTimeout(()=>{
|
||
this.flag = true;
|
||
},2000)
|
||
} else {
|
||
this.showToast('请勿多次点击');
|
||
}
|
||
},
|
||
// 拨打电话
|
||
countCustomer(phone){
|
||
const res = uni.getSystemInfoSync();
|
||
uni.showActionSheet({
|
||
itemList:[phone,'立即呼叫'],
|
||
itemColor:'#3875F6',
|
||
success: (res) => {
|
||
if(res.tapIndex==1){
|
||
uni.makePhoneCall({
|
||
phoneNumber:phone
|
||
})
|
||
}
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* @description 自动返回上一页事件
|
||
*/
|
||
automaticBack() {
|
||
setTimeout(()=>{
|
||
uni.navigateBack({delta:1})
|
||
},2000)
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
export default {
|
||
tools
|
||
} |