import Vue from "vue"; import moment from 'moment';//日期格式化插件 import utils from "@/hotent-ui-util.js" import req from "@/request.js" import _ from "lodash"; import app from "@/main.js"; /** * 根据指令model的值获取拼音 * 使用方式: * 例如: * * * watch role.name set role.code */ let oldValue = ''; Vue.directive('pinyin', { // 指令的定义 componentUpdated: function (el, binding, vnode) { let context = vnode.context; // 防抖 let debounceGetPinyin = _.debounce((newVal) => { if (newVal != oldValue) { return; } // disabled 或者 readonly 时 不需要请求 if (el.__vue__ && el.__vue__.disabled || el.__vue__ && el.__vue__.readonly) return; req.request({ url: `${window.context.uc}/base/tools/v1/getPinyin`, method: "GET", params: { chinese: newVal, type: `${binding.modifiers.full ? 1 : 0}` } }).then(res => { if (res.data.state) { let modelExp = vnode.data.model.expression.replace(/\[\w+.?\$\w+\]/g, "[" + binding.arg + "]") utils.setValueByPath(context, modelExp, res.data.value); app.$nextTick(() => { app.$validator.validate(); }) } }).finally(() => { }); }, 300); if (binding.value && binding.value != binding.oldValue) { oldValue = binding.value; debounceGetPinyin(binding.value); } else if (binding.value == '') { oldValue = binding.value; debounceGetPinyin(binding.value); } } }); Vue.filter('dateformat', function (dataStr, pattern = 'yyyy-MM-DD HH:mm:ss') { if (dataStr) { return moment(dataStr).format(pattern) } else { return ""; } }); //VUE页面使用:{{ newsinfo.add_time | dateformat('YYYY-MM-DD HH:mm:ss')}} Vue.filter('timeLag', function (difference) { let r = "", ////计算出相差天数 days = Math.floor(difference / (24 * 3600 * 1000)), //计算出小时数 leave1 = difference % (24 * 3600 * 1000), //计算天数后剩余的毫秒数 hours = Math.floor(leave1 / (3600 * 1000)), //计算相差分钟数 leave2 = leave1 % (3600 * 1000), //计算小时数后剩余的毫秒数 minutes = Math.floor(leave2 / (60 * 1000)), //计算相差秒数 leave3 = leave2 % (60 * 1000), //计算分钟数后剩余的毫秒数 seconds = Math.round(leave3 / 1000); if (days > 0) r += days + "天"; if (hours > 0) r += hours + "小时"; if (minutes > 0) r += minutes + "分钟"; if (seconds > 0) r += seconds + "秒"; if (!r) { return '0秒'; } return r; }); // 当前用户不是平台管理员时删除指令所在元素 Vue.directive('pm', { inserted(el, binding, vnode) { let result = false; try { result = vnode.context.$store.state.login.currentUser.userAttrs.tenantId == -1; } catch (e) { } if (!result) { el.parentNode && el.parentNode.removeChild(el); } } }); // 防抖点击指令 只作用于button按钮元素 Vue.directive('preventReClick', { // 指令的定义 inserted(el, binding) { el.addEventListener('click', e => { if (!el.disabled) { el.disabled = true el.style.cursor = 'not-allowed' setTimeout(() => { el.style.cursor = 'pointer' el.disabled = false }, 1500) } }) } }) Vue.directive('checkright', { inserted(el, binding, vnode) { const len = vnode.elm.parentNode.children.length // 有权限 if (binding.value && binding.value.resourceRight && binding.value.resourceRight.indexOf('3') > -1) { if (len == 1) { return; } setTimeout(() => { el.style.display = '' vnode.elm.parentNode.children[1].style.display = 'none' }, 100); }else{ el.style.display = 'none' el.onclick = function (e) { e.preventDefault() } if (len ==1) { const span = document.createElement('span') span.innerText = el.innerText vnode.elm.parentNode.appendChild(span) }else{ setTimeout(() => { vnode.elm.parentNode.children[1].innerText = el.innerText vnode.elm.parentNode.children[1].style.display = '' }, 100); } } }, update(el, binding, vnode) { const len = vnode.elm.parentNode.children.length // 有权限 if (binding.value && binding.value.resourceRight && binding.value.resourceRight.indexOf('3') > -1) { if (len == 1) { return; } setTimeout(() => { el.style.display = '' vnode.elm.parentNode.children[1].style.display = 'none' }, 100); }else{ el.style.display = 'none' el.onclick = function (e) { e.preventDefault() } if (len ==1) { const span = document.createElement('span') span.innerText = el.innerText vnode.elm.parentNode.appendChild(span) }else{ setTimeout(() => { vnode.elm.parentNode.children[1].innerText = el.innerText vnode.elm.parentNode.children[1].style.display = '' }, 100); } } }, });