main.js
import allFun from './common/commonFun' //公共函数
Vue.use(allFun)
其他组件直接调用commonFun的方法 eg:this.oosCertificate()
commonFun.js
// 公用方法库
// 海王公共函数
export default {
install(Vue) {
// oss请求证书
Vue.prototype.oosCertificate = function () {
return new Promise((reslove, reject) => {
let _result = JSON.parse(localStorage.getItem("oss_times"))
let timestamp = new Date().getTime();
if (_result == undefined || ((timestamp - _result.times) / 60000 > 15)) {
this.$api.get_upload_info()
.then((result) => {
if (result.code == 0) {
localStorage.setItem("oss_times", JSON.stringify(result)); //证书存在缓存
reslove(result.times)
}
})
.catch(err => {
console.log("获取oss失败", err);
this.$toast('图片选择错误');
reject(err)
});
} else {
console.log(_result);
reslove("ok")
}
})
};
// 上传图片函数
Vue.prototype.imgUp = function (formData, index) {
return new Promise((reslove, reject) => {
let that = this;
let _result = JSON.parse(localStorage.getItem("oss_times"))
let OSS = require('ali-oss')
that.client = new OSS({
region: 'oss-cn-shenzhen',
accessKeyId: _result.data.accessId,
accessKeySecret: _result.data.accessKey,
bucket: 'puchi',
stsToken: _result.data.securityKey
});
put(formData, _result, index);
// console.log(formData)
async function put(file, result_data, index) {
try {
//object-name可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
let UUID = createUUID();
let timestamp = Date.parse(new Date())
let md5code = that.$md5(UUID + timestamp);
// console.log("md5code", md5code)
let suffix = await fileinfo(file);
// console.log(suffix)
let result = await that.client.put(result_data.data.subPath + '/' + result_data.data.fileNamePrefix + md5code + suffix, file);
that.res_url.push(result.name); //修改调用页面的imgurl
reslove(index)
} catch (e) {
console.log(e);
this.$store.commit('storeIsLoding', false);
that.$toast({
message: '上传失败',
duration: 2000,
forbidClick: true,
})
}
}
})
};
function createUUID() { //uuid转换摘要
let d = new Date().getTime();
if (window.performance && typeof window.performance.now === "function") {
d += performance.now(); //use high-precision timer if available
}
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
}
function fileinfo(file) { //获取图片文件信息
return new Promise((reslove, reject) => {
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (theFile) {
let image = new Image();
image.src = theFile.target.result;
image.onload = function () {
let w_h = '_' + this.width + 'x' + this.height
let index = file.name.lastIndexOf('.');
let suffix = file.name.substring(index);
const order = w_h + suffix;
reslove(order);
};
};
})
}
Vue.prototype.timestampToTime = function (timestamp) { //时间戳转换时间
var newtime = (new Date()).getTime()
var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
let Y = date.getFullYear() + '-';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
let D = date.getDate() + ' ';
let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
let chaTime = newtime - timestamp;
let main = chaTime / 1000 / 60;
let hour = main / 60;
let day = hour / 24;
let time_chan = '';
if (parseInt(main) < 1) {
time_chan = '刚刚'
return time_chan
} else if (parseInt(main) < 60) {
time_chan = parseInt(main) + '分钟前'
return time_chan
} else if (parseInt(hour) < 24) {
time_chan = parseInt(hour) + '小时前'
return time_chan
} else if (parseInt(day) < 2) {
time_chan = parseInt(day) + '小时前'
return time_chan
} else {
return Y + M + D + h + m + s;
}
}
Vue.prototype.endorse = function (item) { //点赞文章
if (this.openid) {
if (this.is_click_endorse) {
this.is_click_endorse = false;
if (item.doLIke == 0) {
item.doLIke = 1
item.likeNumber++;
} else {
item.doLIke = 0
item.likeNumber--;
}
this.$api.praise_post({
targetId: item.postId,
type: item.doLIke
})
.then(res => {
if (res.code == 0) {
this.is_click_endorse = true;
} else {
this.is_click_endorse = true;
this.$store.commit('storeIsLogin', true);
this.$toast({
message: res.msg,
duration: '1000'
})
if (item.doLIke == 0) {
item.doLIke = 1
item.likeNumber++;
} else {
item.doLIke = 0
item.likeNumber--;
}
}
console.log(res)
})
.catch(err => {
this.$toast({
message: '哎呀,待会再试试吧',
duration: '1000'
})
if (item.doLIke == 0) {
item.doLIke = 1
item.likeNumber++;
} else {
item.doLIke = 0
item.likeNumber--;
}
})
}
} else {
this.$store.commit('storeIsLogin', true);
}
}
Vue.prototype.GetQueryString = function (name) { //获取url上参数
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg) || window.location.hash.substring(window.location.hash.search(
/\?/) + 1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
// 判断是否是全面屏
Vue.prototype.judgeBigScreen = function () { //,这里根据返回值 true 或false ,返回true的话 则为全面屏
let result = false;
const rate = window.screen.height / window.screen.width;
let limit = window.screen.height == window.screen.availHeight ? 1.8 : 1.65; // 临界判断值
// alert('高'+window.screen.availHeight+'宽'+window.screen.availWidth )
// window.screen.height为屏幕高度
// window.screen.availHeight 为浏览器 可用高度
if (rate > limit) {
result = true;
}
return result;
};
Vue.prototype.doCopy = function (val) { //复制到剪切板
this.$copyText(val).then((e) => {
this.$toast({
message: '分享链接已复制',
duration: '1000'
});
console.log(e)
}, (e) => {
this.$toast({
message: '复分享失败',
duration: '1000'
});
console.log(e)
})
};
Vue.prototype.textIsNull = function (val) { //判断输入框是否为空(包括空格 回车)
if (val.replace(/\s/g, '').length > 0) {
return true;
} else {
return false;
}
};
Vue.prototype.getIsMobile = function (val) { //判断是pc还是移动端
var app = navigator.userAgent;
var isIOS = app.indexOf('iPhone') > -1
var isAndroid =
app.indexOf('Android') > -1 || app.indexOf('Linux') > -1
if (isAndroid) {
return true
} else if (isIOS) {
return true
} else {
return false
}
};
Vue.prototype.geteQuipmentClass = function () { //判断是pc还是移动端是否是微信端
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
/* 这是微信浏览器 */
// if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
// // alert("微信移动端")
// console.log("微信移动端")
// } else {
// // pc
// console.log("微信pc端")
// // alert("微信pc端")
// }
return true
} else {
/* 不是微信浏览器,H5支付 */
if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
console.log("h5移动端")
// alert("h5移动端")
} else {
// pc
// alert("h5pc端")
console.log("h5pc端")
}
return false
}
};
网友评论