因为此工具类会一直更新,所以工具比较多,如果有需要查询的可以直接 CTRL+F 搜索关键字。如果有建议的可以留言,有帮助到大家的,麻烦大家点个关注点个赞,谢谢大家支持。
1、是否是全面屏手机(无需参数)
export function judgeBigScreen() { // 这里根据返回值 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; // 临界判断值
if (rate > limit) {
result = true;
}
return result;
};
2、从地址栏取参数
/**
*@param name->需要获取的参数名
*/
export function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
if (window.location.href.split('?')[1]) {
var r = window.location.href.split('?')[1].match(reg);
}
if (r != null) return decodeURI(decodeURI(r[2])); return null;
}
3、封装promise请求(jQuery),根据项目需求自行添加header
/**
* 封装接口请求
* @param url 除主域名以外的请求路径
* @param type 请求的类型,get|post
* @param data 请求的数据
* @returns {Promise<unknown>} 返回请求结果
*/
export function httpRequest(url, type, data) {
return new Promise(
function(resolve, reject) {
var headers = {
'Content-Type': "application/json"
}
// jwt解析必须要加 Bearer + token
if ($.getCookie('token')) {
headers.Authorization = 'Bearer '+$.getCookie('token')
}
$.ajax({
url: getAdminBaseURL() + url,
type: type,
data: data,
headers: headers,
success: function(result) {
resolve(result)
},
fail: function() {
reject()
}
})
}
)
}
4、vue中Request和response拦截器
import Vue from 'vue';
import axios from 'axios';
import VueAxios from 'vue-axios';
import VueCookie from 'vue-cookie';
import Util from '../components/common/Util';
import Config from '../config.js';
import qs from 'qs';
// let getBaseUrl = Config.homeUrl;
let ROOT = Config.apiUrl;
Vue.use(VueAxios, axios);
// 将全局的根地址绑定到axios的默认基础路径
// Vue.axios.defaults.baseURL = ROOT;
Vue.axios.defaults.baseURL = ROOT;
// 设置公共请求header信息
Vue.axios.defaults.headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
};
/**
* sendPost请求
* @param url
* @param params 参数默认为空对象
* @returns {Promise}
*/
export function sendPost(url, data = {}) {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
resolve(response.data);
}).catch(err => {
reject(err);
});
});
}
/**
* sendGet请求
* @param url
* @param params 参数默认为空对象
* @returns {Promise}
*/
export function sendGet(url, data = {}) {
return new Promise((resolve, reject) => {
axios.get(url, data)
.then(response => {
resolve(response.data);
}).catch(err => {
reject(err);
});
});
}
// http request拦截器
Vue.axios.interceptors.request.use(
(config) => {
let loginToken = VueCookie.get('login-token');
config.headers['login-token'] = loginToken;
// console.log(config)
if (config.url.indexOf('/JSON') == 0) {
config.headers['Content-Type'] = 'application/json;charset=UTF-8';
config.url = config.url.substr(5);
} else {
config.data = qs.stringify(config.data);
}
// if (config.method == 'get') {
// }
return config;
},
(error) => {
// Do something with request error
return Promise.reject(error);
}
);
// http response 拦截器
Vue.axios.interceptors.response.use(
(response) => {
if (response.status == 200) {
var resultMap = response.data;
if (resultMap) {
if (!resultMap.code) {
return response;
} else {
if (resultMap.code == 200) {
return response;
} else {
if (resultMap.msg) {
if (resultMap.code == 310 || resultMap.code == 311) {
// alert(resultMap.code)
setTimeout(function () {
// 退出登录 移除当前域中的token
VueCookie.remove('login-token', { domain: Util.getOptionDomain() });
}, 100);
// window.location.href = getBaseUrl + '/login.html';
} else {
return response;
}
}
}
}
}
} else {
return response;
}
},
(error) => {
// window.location.href = getBaseUrl + '/login.html'
return Promise.reject(error);
}
);
export default axios;
5、获取前几天日期
/**
* 获取前几日日期
* @param {*} dayNumber 几天前天数 如果不传值就是当天
* @returns 有入参返回{},无入参返回''
*/
function getday (dayNumber) => {
let days = [];
let startAndEnd = {};
var Datee = new Date();
if (!dayNumber) {
let dateItem = new Date(Datee.getTime() - 60 * 60 * 1000); //使用当天时间戳减去以前的时间毫秒(小时*分*秒*毫秒)
let y = dateItem.getFullYear(); //获取年份
let m = dateItem.getMonth() + 1; //获取月份js月份从0开始,需要+1
let d = dateItem.getDate(); //获取日期
let valueItem = y + '-' + m + '-' + d; //组合
return valueItem
}
for (let i = 0; i <= dayNumber * 24; i += 24) { //144是前六天的小时数
let dateItem = new Date(Datee.getTime() - i * 60 * 60 * 1000); //使用当天时间戳减去以前的时间毫秒(小时*分*秒*毫秒)
let y = dateItem.getFullYear(); //获取年份
let m = dateItem.getMonth() + 1; //获取月份js月份从0开始,需要+1
let d = dateItem.getDate(); //获取日期
m = addDateZero(m); //给为单数的月份补零
d = addDateZero(d); //给为单数的日期补零
let valueItem = y + '-' + m + '-' + d; //组合
days.push(valueItem); //添加至数组
}
startAndEnd.startTime = days[days.length - 1];
startAndEnd.endTime = days[0]
return startAndEnd;
}
function addDateZero(time) {
if (time.toString().length == 1) {
time = '0' + time.toString();
}
return time;
}
6、Canvas自动换行
// 自动换行
/**
* @text:文字
* @maxWidth:最大宽度
* @lineHieght:行高
*/
CanvasRenderingContext2D.prototype.wrapText = function(text, x, y, maxWidth, lineHeight) {
if (typeof text != 'string' || typeof x != 'number' || typeof y != 'number') {
return;
}
var context = this;
var canvas = context.canvas;
if (typeof maxWidth == 'undefined') {
maxWidth = (canvas && canvas.width) || 300;
}
if (typeof lineHeight == 'undefined') {
lineHeight = (canvas && parseInt(window.getComputedStyle(canvas).lineHeight)) || parseInt(window.getComputedStyle(document.body).lineHeight);
}
// 字符分隔为数组
var arrText = text.split('');
var line = '';
for (var n = 0; n < arrText.length; n++) {
var testLine = line + arrText[n];
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if (testWidth > maxWidth && n > 0) {
context.fillText(line, x, y);
line = arrText[n];
y += lineHeight;
} else {
line = testLine;
}
}
context.fillText(line, x, y);
};