import Vue from 'vue' import { defaultImg } from '../config/env' import { getSessionStorage } from '@/utils/base' import { createdAuth } from '@/utils/createdAuth' /*指令测试*/ Vue.directive('demo', { bind: function(el, binding, vnode) { var s = JSON.stringify el.innerHTML = 'name: ' + s(binding.name) + '
' + 'value: ' + s(binding.value) + '
' + 'expression: ' + s(binding.expression) + '
' + 'argument: ' + s(binding.arg) + '
' + 'modifiers: ' + s(binding.modifiers) + '
' + 'vnode keys: ' + Object.keys(vnode).join(', ') } }) /*权限*/ Vue.directive('auth', function(el, binding) { let auth = getSessionStorage('authlist'); if (!auth) { let authlist = {} createdAuth(auth, authlist); setSessionStorage('authlist', authlist); auth = authlist; } let value = binding.value.toLowerCase(); if (auth[value] != true) { el.style.display = "none"; } }) /*默认图片*/ Vue.directive('img-url', async function(el, binding) { let imgURL = ''; if (binding.value instanceof Object) { let jsonStr = binding.expression.split(',')[0].replace(/\'/g, ''); imgURL = checkChild(binding.value, jsonStr); } else { imgURL = binding.value; } if (imgURL && typeof(imgURL) != 'undefined') { let exist = await imageIsExist(imgURL); if (exist) { el.setAttribute('src', imgURL); } else { el.setAttribute('src', defaultImg); } } else { el.setAttribute('src', defaultImg); } }) /*检查子对象是否为NUll*/ let checkChild = function(obj, str) { let _img = null; let arr = str.match(/\./g); if (!arr) { _img = obj[str]; } else { let _i = str.indexOf('.'); let key = str.substring(0, _i); let newobj=obj[key]; if (newobj instanceof Object == true) { let newstr = str.substring(_i+1); _img=checkChild(newobj, newstr); } } return _img; } /* 检测图片是否存在*/ let imageIsExist = function(url) { return new Promise((resolve) => { var img = new Image(); img.onload = function() { if (this.complete == true) { resolve(true); img = null; } } img.onerror = function() { resolve(false); img = null; } img.src = url; }) }