You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
9.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* @Author: your name
* @Date: 2021-10-12 13:56:13
* @LastEditTime: 2021-11-16 11:58:04
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /data-show/src/mixins/index.js
*/
import { mapGetters, mapActions } from "vuex";
import store from '@/store'
import Loading from './loading'
function detectZoom (){
let ratio = 0,
screen = window.screen,
ua = navigator.userAgent.toLowerCase();
if (window.devicePixelRatio !== undefined) {
ratio = window.devicePixelRatio;
}
else if (ua.indexOf('msie')) {
if (screen.deviceXDPI && screen.logicalXDPI) {
ratio = screen.deviceXDPI / screen.logicalXDPI;
}
}
else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
ratio = window.outerWidth / window.innerWidth;
}
// if (ratio){
// ratio ;
// }
return ratio;
}
export default {
install(Vue) {
Vue.mixin({
directives: {
// 按钮权限
has: {
inserted(el, binding) {
let val = binding.value;
let show = false;
if(!val) {
show = false;
} else {
let buttonpermsStr = store.getters.getLevelBtn || [];
let n = buttonpermsStr.findIndex(ele => ele.btn === val);
if(n === -1) show = false;
else show = true;
}
if(!show) {
el.parentNode.removeChild(el);
}
}
},
// 菜单权限
menu: {
inserted(el, binding) {
let val = binding.value;
let show = false;
if(!val) {
show = false;
} else {
let menuStr = store.getters.getMenu || [];
let n = menuStr.findIndex(ele => ele.link === val);
if(n === -1) show = false;
else show = true;
}
if(!show) {
el.parentNode.removeChild(el);
}
}
},
// 等待
'loading': Loading,
// 监听元素大小
resize: { // 指令的名称
bind(el, binding) { // el为绑定的元素binding为绑定给指令的对象
let width = '', height = '';
function isReize() {
const style = document.defaultView.getComputedStyle(el);
if (width !== style.width || height !== style.height) {
binding.value({ width: style.width, height: style.height, ratio: detectZoom() }); // 关键(这传入的是函数,所以执行此函数)
}
width = style.width;
height = style.height;
}
el.__vueSetInterval__ = setInterval(isReize, 300);
},
unbind(el) {
clearInterval(el.__vueSetInterval__);
}
},
// 调整元素高度
highly: {
bind(el, binding) { // el为绑定的元素binding为绑定给指令的对象
let height = '';
let z = binding.value;
let firstH = "";
let b = true;
function adaptive() {
const style = document.defaultView.getComputedStyle(el); // 获取元素
const wh = document.body.clientHeight;
let h = style.height;
firstH = firstH || h;
if (height == wh) return
if(wh >= 760 && wh < 900 && b) {
el.style.height = z * parseFloat(h) + 'px';
b = !b
} else {
el.style.height = firstH;
b = !b;
}
height = wh
}
el.__vueSetInterval__ = setInterval(adaptive, 300);
},
// inserted(el, binding) {
// adaptive(el, binding.value)
// },
unbind(el) {
clearInterval(el.__vueSetInterval__);
}
}
},
computed: {
...mapGetters(['getZoom', 'getLoading','getToken', 'getUser', 'getAccount', 'getCommTime', 'getCtime', 'getCtime2', 'getHeaderType', 'getBrand', 'getModel','getSComparison','getBComparison', 'getMComparison', 'getEComparison','getLevelBtn','getMenu'])
},
methods: {
...mapActions(["setZoom", 'setLoading', 'setToken', 'setUser', 'setAccount', 'setCommTime', 'setCtime', 'setCtime2', 'setHeaderType', 'setBrand', 'setModel', 'setSComparison','setBComparison', 'setMComparison', 'setEComparison','setLevelBtn','setMenu']),
// 获取当前日期时间
getDatetime() {
let now = new Date();
let weeks = new Array(
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
);
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
let hh = now.getHours();
let mm = now.getMinutes();
let ss = now.getSeconds();
let clock = year + "-";
let sClock = "";
let dayw = now.getDay();
let week = weeks[dayw];
if (month < 10) clock += "0";
clock += month + "-";
if (day < 10) clock += "0";
clock += day + " ";
if (hh < 10) sClock += "0";
sClock += hh + ":";
if (mm < 10) sClock += "0";
sClock += mm + ":";
if (ss < 10) sClock += "0";
sClock += ss;
return { clock: clock, sClock: sClock, week: week };
},
getDatetimeSs() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
let hh = now.getHours();
let mm = now.getMinutes();
let ss = now.getSeconds();
let clock = year + "";
let sClock = "";
if (month < 10) clock += "0";
clock += month + "";
if (day < 10) clock += "0";
clock += day + "";
if (hh < 10) sClock += "0";
sClock += hh + "";
if (mm < 10) sClock += "0";
sClock += mm + "";
if (ss < 10) sClock += "0";
sClock += ss;
return clock + sClock;
},
btnPrm(val) {
let b = false;
let buttonpermsStr = store.getters.getLevelBtn || [];
let n = buttonpermsStr.findIndex(ele => ele.btn === val);
if(n === -1) b = false;
else b = true;
return b;
}
},
filters: {
// 处理超出字后面...
doStr(str, n) {
let totalCount = 0;
let txt = "";
for (var i = 0; i < str.length; i++) {
let c = str.charCodeAt(i);
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
totalCount++;
} else {
totalCount += 2;
}
if (totalCount <= n) {
txt += str[i];
} else {
txt += '...';
return txt
}
}
return txt;
},
// 数字转化成金额
formatMoney(val, places, symbol, thousand, decimal) {
places = !isNaN(places = Math.abs(places)) ? places : 2;
symbol = symbol !== undefined ? symbol : "¥";
thousand = thousand || ",";
decimal = decimal || ".";
let number = !isNaN(parseFloat(val)) ? parseFloat(val) : 0;
let negative = number < 0 ? "-" : "";
let i = parseInt(number = Math.abs(+val || 0).toFixed(places), 10) + "";
let j = (j = i.length) > 3 ? j % 3 : 0;
return symbol + negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "");
}
}
})
}
}