const app_info = require("@/static/appInfo.js");
const api_host = app_info.api_host
const version = app_info.version
const api_prefix = api_host + '/addons/exam/'
//工具类
module.exports = {
timestamp() {
return parseInt(new Date().getTime() / 1000);
},
cons_log(...params) {
for (let p of params) {
console.log(p);
}
},
cons_log_json(...params) {
for (let p of params) {
console.log(JSON.stringify(p));
}
},
goto(url) {
uni.navigateTo({
url: url
});
},
goreto(url) {
uni.redirectTo({
url: url
});
},
gotore(url) {
uni.reLaunch({
url: url
});
},
goback(delta = 1) {
uni.navigateBack({
delta: delta
});
},
toast(msg, icon = 'none', duration = 2000, mask = false, image = '') {
uni.showToast({
title: msg,
icon: icon,
duration: duration,
mask: mask,
image: image
})
},
alert(content, callBack) {
uni.hideLoading();
uni.showModal({
content: content,
showCancel: false,
success: function() {
if (callBack != undefined) {
callBack();
}
}
})
},
getData(key, is_clear = false) {
var value = uni.getStorageSync(key);
if (is_clear) {
uni.setStorageSync(key, '');
}
// console.log('get cache', key, value)
return value;
},
setData(key, value) {
// console.log('set cache', key, value)
uni.setStorageSync(key, value);
},
array_column(obj, key) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(this.array_column(obj[i], key));
} else if (i == key) {
objects.push(obj[i]);
}
}
return objects;
},
shuffle(arr) {
var l = arr.length
var index, temp
while (l > 0) {
index = Math.floor(Math.random() * l)
temp = arr[l - 1]
arr[l - 1] = arr[index]
arr[index] = temp
l--
}
return arr
},
// 秒数转时分秒格式
sec_to_time(s) {
var t;
if (s > -1) {
var hour = Math.floor(s / 3600);
var min = Math.floor(s / 60) % 60;
var sec = s % 60;
if (hour < 10) {
t = '0' + hour + ":";
} else {
t = hour + ":";
}
if (min < 10) {
t += "0";
}
t += min + ":";
if (sec < 10) {
t += "0";
}
t += sec.toFixed(2);
}
return t;
},
login() {
var token = this.getData('token');
var user = this.getData('user');
if (!token || !user) {
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const url = currentPage.route
const options = currentPage.options
let urlWithArgs = `/${url}?`
for (let key in options) {
const value = options[key]
urlWithArgs += `${key}=${value}&`
}
urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
uni.setStorageSync('route', urlWithArgs);
console.log('没有缓存数据,需先授权')
uni.redirectTo({
url: "/pages/login/login"
})
return;
}
return true;
},
/**
* rich-text富文本中图片宽度最大100%
* @param {String} html
*/
formatRichText(html) {
// 去掉img标签里的style、width、height属性
let content_data= html.replace(/]*>/gi, function(match,capture) {
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '')
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '')
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '')
return match
})
// 修改所有style里的width属性为max-width:100%
content_data = content_data.replace(/style="[^"]+"/gi,function(match,capture){
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;')
return match
})
// 去掉
标签
content_data = content_data.replace(/
]*\/>/gi, '')
// img标签添加style属性:max-width:100%;height:auto
content_data = content_data.replace(/\}
*/
http(handler, path, data = {}, method = 'post', showLoading = true) {
let url = api_prefix + path
let timestamp = Date.parse(new Date())
if (typeof(data) == 'object') {
data['timestamp'] = timestamp
}
if (showLoading) {
uni.showLoading({
title: '加载中..',
mask: true
})
}
return new Promise((resolve, reject) => {
uni.request({
url: url,
method: method,
data: data,
header: {
'content-type': 'application/json',
'token': this.getData('token'),
'app-version': version
},
success: (res => {
console.log('http res', res)
if (res.statusCode == 200) {
resolve(res.data)
} else {
console.log('http statusCode', res.statusCode)
uni.showToast({
title: res.data.message,
icon: 'none'
})
// 未登录
if (res.statusCode == 401) {
// console.log('this.$refs', this.$refs)
// this.$refs.login.modal = true
// uni.$emit('uniLogin', handler)
handler.$refs.login.modal = true
// handler.$refs.login.afterMethod = () => {
// this.http(handler, path, data)
// }
}
// reject(res.data);
}
}),
fail: (res => {
console.log(res)
return false;
}),
complete: (res => {
showLoading && uni.hideLoading()
})
})
})
},
/**
* 上传文件
* @returns {Promise<*>}
*/
uploadFile(handler, filePath, data = {}, fileType = 'image', showLoading = true) {
if (showLoading) {
uni.showLoading({
title: '加载中..',
mask: true
})
}
return new Promise((resolve, reject) => {
uni.uploadFile({
url: api_prefix + 'common/upload',
header: {
'token': uni.getStorageSync('token'),
"Content-Type": "multipart/form-data"
},
fileType: fileType,
filePath: filePath,
formData: data,
name: 'file',
success: (res) => {
console.log('upload res', res)
let data = JSON.parse(res.data)
if (res.statusCode == 200) {
resolve(data)
} else {
console.log('upload statusCode', res.statusCode)
uni.showToast({
title: data.message,
icon: 'none'
})
// 未登录
if (res.statusCode == 401) {
handler.$refs.login.modal = true
}
}
},
fail: (res) => {
console.log('fail res', res)
return false;
},
complete: (res => {
showLoading && uni.hideLoading()
})
})
})
},
};